gpt4 book ai didi

java - 线程故障

转载 作者:行者123 更新时间:2023-12-01 14:37:58 24 4
gpt4 key购买 nike

我有这个项目,有 2 个类(class)。 Activity_main有2个按钮,button1运行一个线程,我想用button2停止它,但它不起作用,因为当线程运行时,button2不可点击。最后 AVD 停止程序。请问,有什么建议吗???

提前致谢。

activity_main.xml

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="gestionbotones"
android:text="Thread ON" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="gestionbotones"
android:text="Thread OFF" />

MainActivity.java

public class MainActivity extends Activity {
.......
private HiloJuego hj = new HiloJuego();
.......
public void gestionbotones (View v){
int id = v.getId();
switch(id){
case R.id.button1 :
Log.d(TAG, "Thread activado");
hj.setRunning(true);
hj.setTurno(true);
hj.run();
break;
case R.id.button2: // Desactivar
hj.setRunning(false);
Log.d(TAG, "Thread destruído");
break;
default:
break;
}
}

HiloJuego.java

package com.example.tocatoca1;
import android.util.Log;
public class HiloJuego extends Thread {
private static final String TAG = HiloJuego.class.getSimpleName();

private boolean running;
private boolean turno;
public void setRunning(boolean running) {
this.running = running;
}
public void setTurno(boolean turno){
this.turno=turno;
}
public HiloJuego() {
super();
}
@Override
public void run() {
Log.d(TAG, "Starting game loop");
while (running) {
if (turno){
Log.d(TAG, "Turno Ordenador");
} else{
Log.d(TAG, "Turno Jugador");
}
} // end finally
}
}

最佳答案

要在单独的线程中运行 Thread 实例,请使用 Thread#start(),而不是 Thread#run()Thread#run() 不会创建新线程,而只是在当前线程(即 UI Thread,这就是你得到 ANR 的原因)中运行 run()

还有it's better to implement Runnable than to extend Thread .

关于java - 线程故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com