2013-04-30 81 views
0

我有这个项目,有2个类。 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 
} 
} 
+0

您的mainactivity.java只运行一次。 – 2013-04-30 14:57:08

+1

@AsierAranbarri和? – m0skit0 2013-04-30 15:01:57

+0

+1为自蠢 – 2013-04-30 15:04:16

回答

1

在一个单独的线程中运行一个实例Thread,它Thread#start(),不Thread#run()Thread#run()不会创建一个新线程,而只是在当前线程中运行run()(这是UI线程,这就是为什么你会得到ANR)。

it's better to implement Runnable than to extend Thread

+0

谢谢你m0skit0。 – josemfr 2013-04-30 15:18:32