![](/img/trans.png)
[英]Android Thread.start() CalledFromWrongThreadException
[英]Android java crash after thread.start
由于某种原因,我的程序在完成thread.start方法后崩溃。 因为这是我第一次使用Thread,所以我完全迷失了方向,不知道发生了什么。
public void countingDown() {
waitingTime = (long) (Math.random() * 1000 + 3000);
button.setText("Wait");
try {
Thread.sleep(waitingTime);
} catch (Exception e) {
}
time1 = System.currentTimeMillis();
button.setText("Press");}
并调用胎面:
new Thread(new Runnable() {
@Override
public void run() {
countingDown();
}
}).start();
我将非常感激!
我的logCat显示以下内容(抱歉,一团糟):
10-22 14:59:43.319:E / AndroidRuntime(961):致命异常:线程81 10-22 14:59:43.319:E / AndroidRuntime(961):android.view.ViewRootImpl $ CalledFromWrongThreadException:仅原始线程创建视图层次结构的对象可以触摸其视图。 10-22 14:59:43.319:E / AndroidRuntime(961):在android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5908)10-22 14:59:43.319:E / AndroidRuntime(961):在android。 view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:869)10-22 14:59:43.319:E / AndroidRuntime(961):位于android.view.ViewGroup.invalidateChild(ViewGroup.java:4253)10-22 14:59: 43.319:E / AndroidRuntime(961):位于android.view.View.invalidate(View.java:10539)10-22 14:59:43.319:E / AndroidRuntime(961):位于android.view.View.invalidate(查看.java:10494)10-22 14:59:43.319:E / AndroidRuntime(961):位于android.widget.TextView.checkForRelayout(TextView.java:6511)10-22 14:59:43.319:E / AndroidRuntime(961) ):在android.widget.TextView.setText(TextView.java:3771)10-22 14:59:43.319:E / AndroidRuntime(961):在android.widget.TextView.setText(TextView.java:3629)10- 22 14:59:43.319:E / AndroidRuntime(961):在android.widget.TextView.setText(TextView.java:3604)10-22 14:59:43.319:E / AndroidRuntime(961):在week8.handin Week8Handin.countingDow n(Week8Handin.java:59)10-22 14:59:43.319:E / AndroidRuntime(961):在week8.handin.Week8Handin $ 1.run(Week8Handin.java:82)10-22 14:59:43.319:E / AndroidRuntime(961):位于java.lang.Thread.run(Thread.java:841)
您正在不是主(UI)线程的线程中执行UI操作( button.setText()
)。 你需要一个Handler
或AsyncTask
来实现这一目标-读这对他们进一步的信息,以及对整个“没有在主线程”的东西-或者至少runOnUiThread()
一样下面的例子(需要声明的button
变量final
才能正常工作):
public void countingDown() {
waitingTime = (long) (Math.random() * 1000 + 3000);
button.setText("Wait");
try {
Thread.sleep(waitingTime);
} catch (Exception e) {
}
time1 = System.currentTimeMillis();
runOnUiThread(new Runnable() {
public void run() {
button.setText("Press");
}
});
}
如果您还有其他问题,请告诉我们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.