由于某种原因,我的程序在完成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");}
并打电话给Tread:
new Thread(new Runnable() {
@Override
public void run() {
countingDown();
}
}).start();
我真的很感激!
我的logCat显示以下内容(抱歉这个烂摊子):
10-22 14:59:43.319:E / AndroidRuntime(961):致命异常:Thread-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(View.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):at week8.handin.Week8Handin.countingDown(Week8Handin.java:59) 10-22 14:59:43.319:E / AndroidRuntime(961):at week8.handin.Week8Handin $ 1.run(Week8Handin.java:82) 10-22 14:59:43.319:E / AndroidRuntime(961):at java.lang.Thread.run(Thread.java:841)
答案 0 :(得分:4)
您正在不是主(UI)线程的线程中执行UI操作(button.setText()
)。您需要Handler
或AsyncTask
才能完成此操作 - 阅读this以获取有关它们以及整体'不在主线程中'的更多信息 - 或者至少{{1}以下示例(您需要声明runOnUiThread()
变量button
才能生效):
final
如果您有其他问题,请告诉我们。