0

wait() および notify() メソッドを示す単純な Android アプリケーションを作成しています。アプリケーションには 1 つのボタンと 1 つの textView が含まれ、textView にはタイマーが表示され、button には 2 つのボタンを含むダイアログが表示されます。今私がやりたいことは、ダイアログボタンを押すたびに一時停止し、ダイアログ内で再開ボタンを押して再開するたびに、時間の継続などです。

これが私のコードです:

public class MainActivity extends Activity implements OnClickListener{

Timer t;
int count = 0;

Button b;
TextView tv;

Thread thread;

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

    b = (Button) findViewById(R.id.button1);
    tv = (TextView) findViewById(R.id.textView1);

    t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            runOnUiThread(new Runnable() {
                public void run() {
                tv.setText(String.valueOf(count));
                count++;
                }
            });
        }
    }, 1000, 1000);

    b.setOnClickListener(this);


}


@Override
public void onClick(View v) {
    // TODO Auto-generated method stub

    synchronized (MainActivity.this)
    {
        try {
            wait();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    final Dialog d = new Dialog(this);
    d.setTitle("Pause Menu");
    d.setContentView(R.layout.pausemenu);
    Button b1 = (Button) d.findViewById(R.id.Resume);
    Button b2 = (Button) d.findViewById(R.id.Main);

    b1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            d.cancel();
            thread = new Thread()
            {
                public void run()
                {
                    synchronized (MainActivity.this) {
                        try {
                            wait(1000);

                        }catch (Exception e) {
                            // TODO: handle exception
                        }

                        notify();
                    }
                }
            };
        }
    });

    b2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            d.cancel();
        }
    });
    d.show();

}
}

ここにlogcatがあります:

06-09 08:07:55.066: E/AndroidRuntime(635): FATAL EXCEPTION: main
06-09 08:14:43.946: E/AndroidRuntime(664): FATAL EXCEPTION: main
06-09 08:14:43.946: E/AndroidRuntime(664): java.lang.NullPointerException
06-09 08:14:43.946: E/AndroidRuntime(664):  
at com.example.timerwithnotify.MainActivity.onClick(MainActivity.java:58)
06-09 08:14:43.946: E/AndroidRuntime(664):       
at  android.view.View.performClick(View.java:2408)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at android.view.View$PerformClick.run(View.java:8816)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at android.os.Handler.handleCallback(Handler.java:587)
 06-09 08:14:43.946: E/AndroidRuntime(664):     
at android.os.Handler.dispatchMessage(Handler.java:92)
06-09 08:14:43.946: E/AndroidRuntime(664):  at android.os.Looper.loop(Looper.java:123)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at android.app.ActivityThread.main(ActivityThread.java:4627)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at java.lang.reflect.Method.invokeNative(Native Method)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at java.lang.reflect.Method.invoke(Method.java:521)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-09 08:14:43.946: E/AndroidRuntime(664):  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)

これを修正する方法をコードで教えてください。私はまだ初心者です:D. あなたの時間と配慮していただきありがとうございます。

4

2 に答える 2