2017-05-21 11 views
-1

カウントを開始するスレッドからタイマーを停止しようとしています。私は、「START」ボタンを押すとすべてが大丈夫ですが、現時点では私は「STOP」ボタンを押すと、私は次のエラーを取得:シンプルタイマーをトレッドで止める

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

私はこれで新しいよ、私はちょうど置くしようとしています実際にはスレッドを使用してハンドラを使用します。誰かがプラスになるスレッドを終了する方法を教えてくださいすることができます:)

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; 
    } 
} 
} 

答えて

0

test場合はinitialisdではありません。 onCreate()test

test=new tstart(); 

のオブジェクトを作成し、testの代わりに、あなたは標準をしようとしないのはなぜcounter

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

を使用し、counterの必要性は何

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

JavaタイマAndroidでうまく動作するとjava.util.TimerTask

+0

ありがとうございました!私はあなたが後で私を参照するライブラリを使用します。今私はダミーの演習でスレッドを完全に理解しようとしています。 –

+0

あなたは 'onstart test;'メソッドを 'onCreate()'メソッドの中にグローバルかつローカルで宣言しましたが、 'OnClick_stop'メソッドの中でそのオブジェクト参照の使用を開始したり使い始めたりしませんでした。 – Aryan