Java 螺纹故障

Java 螺纹故障,java,android,multithreading,Java,Android,Multithreading,我有这个项目,有两个班。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"

我有这个项目,有两个班。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" />
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
}
}
要在单独的线程中运行线程实例,它是Threadstart,而不是Threadrun。Threadrun不会创建新线程,只会在当前线程(即UI线程)中运行,这就是为什么会得到ANR


另外。

mainactivity.java只运行一次。+1表示self-stupidness setrunning不太正确。要么使其同步并使用同步的getRunning对等项,要么声明running volatile,要么声明AtomicBoolean。
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
}
}