由于某种原因,我的程序在完成 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): FATAL EXCEPTION: Thread-81 10-22 14:59:43.319: E/AndroidRuntime(961): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 10-22 14:59:43.319: E/AndroidRuntime(961): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5908) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:869) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4253) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.view.View.invalidate(View.java:10539) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.view.View.invalidate(View.java:10494) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.widget.TextView.checkForRelayout(TextView.java:6511) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.widget.TextView.setText(TextView.java:3771) 10-22 14:59:43.319: E/AndroidRuntime(961): at android.widget.TextView.setText(TextView.java:3629) 10-22 14:59:43.319: E/AndroidRuntime(961): at 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)
最佳答案
您正在非主 (UI) 线程的线程中执行 UI 操作 (button.setText()
)。您需要一个 Handler
或 AsyncTask
来完成此任务 - 请阅读 this有关它们以及整个“不在主线程中”的更多信息 - 或者至少像下面的示例一样 runOnUiThread()
(您需要声明您的 button
code> 变量 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");
}
});
}
如果您还有其他问题,请告诉我们。
关于java - Android java 在 thread.start 后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19526236/