setvisibility中的应用程序崩溃android

问题描述:

我是一名新开发人员,在设置覆盖我的UI的布局的可见性以在运行脚本时禁用它时遇到问题。setvisibility中的应用程序崩溃android

这里是我的代码:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 

    switch (item.getItemId()) { 
     case R.id.action_settings: 
      return true; 

     case R.id.action_loadfile: 
      saveTellNamesArray(); 
      LoadFile(txtFolder, ScriptArray); 
      return true; 

     case R.id.action_runscript: 

      disableLayout(); 

      stopScript = false; 

      scriptThread = new Thread(new Runnable() { 
       @Override 
       public void run() { 
        while (!scriptThread.isInterrupted() && !stopScript) { 
         runScript(); 
        } 
        if (stopScript)//revisar 
         enableLayout(); 
       } 
      }); 
      scriptThread.start(); 

      //enableLayout(); 
      return true; 

     case R.id.action_stopscript: 
      if (scriptThread != null) { 
       //scriptThread.interrupt(); 
       stopScript = true; 
      } 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

的问题是,应用程序,只要我调用enableLayout()函数崩溃:

public void disableLayout() { 
    uiBlockLayout.setVisibility(FrameLayout.VISIBLE); 
    uiBlockLayout.bringToFront(); 
} 

public void enableLayout() { 
    uiBlockLayout.setVisibility(FrameLayout.GONE); 
} 

什么问题可能是任何线索?

+4

请,** **份额的**记录错误**。 – Nawako

+0

Nawako说了些什么,再加上'uiBlockLayout'被赋值的范围。 – Mena

+0

谢谢大家,由@ρяσѕρєяK给出的答案是正确的。感谢您的时间。 – Sombrero22

任何有关问题的线索?从non UI Thread

是,问题已存在的存取UI元素(主叫enableLayout方法scriptThread线程中运行方法)。

使用runOnUiThread方法访问非UI线程浏览:

if (stopScript){ 
    runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     enableLayout(); 
    } 
    }); 
} 
+0

@Mena:嗨,API级别不可能?谢谢 –

+1

@Mena什么取决于API级别? runOnUiThread从API 1 – Mike

+0

@Mena:肯定.... :) –