Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在thread.start之后Android java崩溃_Java_Android_Multithreading - Fatal编程技术网

在thread.start之后Android java崩溃

在thread.start之后Android java崩溃,java,android,multithreading,Java,Android,Multithreading,由于某种原因,我的程序在完成thread.start方法后崩溃。由于这是我第一次使用线程,我完全迷路了,不知道发生了什么 public void countingDown() { waitingTime = (long) (Math.random() * 1000 + 3000); button.setText("Wait"); try { Thread.sleep(waitingTime); } catch (Exception e) { } time1 = System.c

由于某种原因,我的程序在完成thread.start方法后崩溃。由于这是我第一次使用线程,我完全迷路了,不知道发生了什么

    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();
我将非常感激

我的日志显示以下内容(很抱歉弄乱了):

10-22 14:59:43.319:E/AndroidRuntime(961):致命异常:线程81 10-22 14:59:43.319:E/AndroidRuntime(961):android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图。 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):在第8周。交接。第8周和第8周。倒计时(第8周和第6周:59) 10-22 14:59:43.319:E/AndroidRuntime(961):在第8周。交车。第8周和1美元。跑步(第8周和第6周:82) 10-22 14:59:43.319:E/AndroidRuntime(961):在java.lang.Thread.run(Thread.java:841)处


您正在非主(UI)线程的线程中执行UI操作(
button.setText()
)。您需要一个
处理程序
异步任务
来完成这一任务-阅读更多关于它们的信息以及总体上“不在主线程中”的内容-或者至少
runOnUiThread()
如下示例所示(您需要声明
按钮
变量
final
才能工作):


如果您还有其他问题,请告诉我们。

您正在非主(UI)线程的线程中执行UI操作(
button.setText()
)。您需要一个
处理程序
异步任务
来完成这一任务-阅读更多关于它们的信息以及总体上“不在主线程中”的内容-或者至少
runOnUiThread()
如下示例所示(您需要声明
按钮
变量
final
才能工作):


如果您还有其他问题,请告诉我们。

错误是关于访问
按钮的
变量不是线程安全的,是否有其他线程运行dude?没错。您只能从主ui线程访问按钮。没有其他线程正在运行。创建新线程时,它与主(ui)线程不同。您只能在UI线程(即不创建任何其他线程时运行的线程)中执行与UI相关的操作,如
button.setText()
。错误是访问
button
变量不是线程安全的,是否有其他线程运行dude?没错。您只能从主ui线程访问按钮。没有其他线程正在运行。创建新线程时,它与主(ui)线程不同。您只能在UI线程(即不创建任何其他线程时运行的线程)中执行与UI相关的操作,如
button.setText()
。我注意到在我的线程中强制转换为CharSequence会导致崩溃。我注意到在我的线程中强制转换为CharSequence会导致崩溃。
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");
        }
    });
}