【问题标题】:thread malfunction II [duplicate]线程故障II [重复]
【发布时间】:2013-04-30 18:38:06
【问题描述】:

另一个问题: 现在可以启动线程了,问题是这样的:点击button1并启动线程,点击button2并将running设置为false,这样线程就结束了。问题是如果我再次单击 button1 则错误和应用程序停止。

请问,问题出在哪里???提前致谢。

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.start();
        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
}
}

【问题讨论】:

  • No Gray,是几乎相同代码 (hj.start()) 的另一个问题。是另一个问题。谢谢。
  • @josemfr 通常,您应该显示错误的堆栈跟踪。

标签: android multithreading


【解决方案1】:

您不能在 Java 中重新启动线程。你必须创建一个新的。您正在尝试重复使用之前停止的同一个。

【讨论】:

    【解决方案2】:

    您正在尝试在下次单击时启动已启动的线程。

    if(!hj.isAlive()) {  
        hj.setRunning(true);
        hj.setTurno(true);
        hj.start();
    }
    

    【讨论】:

    • 同样的错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多