【发布时间】:2020-03-04 13:01:53
【问题描述】:
我是 Android 的 Java 编程新手,但我遇到了线程问题。我想用计数器制作一个简单的 apk。我想增加计数器并显示价值。 Android Studio 3.4.2 JRE 1.8.0
这是我的代码:
public class MainActivity extends AppCompatActivity {
private Button my_button;
private boolean start_stop = false;
private int counter = 0;
private TextView my_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
my_button = findViewById(R.id.My_Button);
my_text = findViewById(R.id.my_text);
}
public void onClick_button(View view) {
if(start_stop != true) {
my_button.setText("STOP");
start_stop = true;
new Thread(new Runnable() {
@Override
public void run() {
while (start_stop) {
my_text.setText(Integer.toString(counter));
counter++;
try {
Thread.sleep(1000); // sleep 1 sec
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}else {
my_button.setText("START");
start_stop = false;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
start_stop = false;
}
}
在这种情况下,我的应用程序崩溃并显示消息“不幸的是,switch_picture 已停止”。在 Log cat 我有这个:
11-07 21:41:29.194 27684-27724/com.example.switch_pictures E/AndroidRuntime: 致命异常: Thread-416 进程:com.example.switch_pictures,PID:27684 android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能接触其视图。 在 android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6357) 在 android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:909) 在 android.view.ViewGroup.invalidateChild(ViewGroup.java:4690) 在 android.view.View.invalidateInternal(View.java:11801) 在 android.view.View.invalidate(View.java:11765) 在 android.view.View.invalidate(View.java:11749) 在 android.widget.TextView.checkForRelayout(TextView.java:6872) 在 android.widget.TextView.setText(TextView.java:4057) 在 android.widget.TextView.setText(TextView.java:3915) 在 android.widget.TextView.setText(TextView.java:3890) 在 com.example.switch_pictures.MainActivity$1.run(MainActivity.java:34) 在 java.lang.Thread.run(Thread.java:818) 11-07 21:41:29.867 27684-27702/com.example.switch_pictures D/EGL_emulation: eglMakeCurrent: 0xb432f100: 版本 2 0 (tinfo 0xb429fdc0)
【问题讨论】:
标签: java android multithreading