2017-05-21 1 views
-1

J'essaie d'arrêter une minuterie à partir d'un thread qui commence le compte. Quand j'appuie sur le bouton « START » tout va bien, mais pour le moment j'appuie sur le bouton « Stop » je reçois l'erreur suivante:Arrêt de la minuterie simple avec une bande de roulement

FATAL EXCEPTION: main Process: com.example.user.a4_1_basic_handler, PID: 20375 java.lang.IllegalStateException: Could not execute method for android:onClick

Je suis novice en la matière, je suis juste en train de mettre en pratique fil en utilisant gestionnaire. Si quelqu'un peut me dire comment terminer le fil qui sera un plus :)

package com.example.user.a4_1_basic_handler; 


import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

//Java variables 
int num =0; 
boolean stopThread=false; 
//Android variables 
static final String S_TAG=MainActivity.class.getSimpleName(); 
Handler handler; 
Thread counter = new Thread(new tstart()); 
tstart test; 
// UI 
TextView textView; 
Button start_button; 
Button stop_button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Log.i(S_TAG,"OnCreate Thread ID: "+Thread.currentThread().getId()); 
    handler = new Handler(getApplicationContext().getMainLooper()); 
    tstart test; 

    textView=(TextView) findViewById(R.id.textView); 
    start_button=(Button) findViewById(R.id.start_button); 
    stop_button=(Button) findViewById(R.id.stop_button); 
} 
//UI 
public void OnClick_start(View view){ 
    counter.start(); 
} 
public void OnClick_stop(View view){ 
    test.finish(); 
} 
//Methods 
public void timer(){ 
    num++; 
    textView.setText(String.valueOf(num)); 
} 
public void clock(){ 
    try {Thread.sleep(1000);} 
    catch (InterruptedException e) {e.printStackTrace();} 
} 
//Thread 
class tstart extends Thread{ 
    @Override 
    public void run() { 
     while (!stopThread) { 
      clock(); 
      textView.post(new Runnable() { 
       @Override 
       public void run() { 
        timer(); 
       } 
      }); 
     } 
    } 
    public void finish(){ 
     stopThread=true; 
    } 
} 
} 

Répondre

0

test n'est pas initialisd.

Thread counter = new Thread(new tstart()); 

Quel est le besoin de counter, à l'intérieur onCreate() objet de créer test

test=new tstart(); 

Et utiliser test au lieu de counter

public void OnClick_start(View view){ 
    test.start(); 
} 

Pourquoi ne pas essayer standard Java timer java.util.Timer et java.util.TimerTask qui fonctionne bien dans Android.

+0

Merci beaucoup! J'utiliserai les librairies dont vous parlez plus tard. Maintenant, j'essaie de comprendre pleinement les discussions avec des exercices factices. –

+0

vous avez déclaré 'tstart test;' globalement et localement dans la méthode 'onCreate()' mais jamais initialisé et commencez à utiliser cette référence dans la méthode 'OnClick_stop'. – Aryan