2

コードで3つのスレッドを使用しています.「停止」ボタンを押すと停止し、「開始」ボタンで再開する必要があります..ここに私のコードがあります:

 private void jButton_stopActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    boolean result = value;
    if(result){
        t.stop();
        timer.stop();
        timer2.stop();
        value = false;
        jButton_stop.setText("Start");
    }
    else{
        t.resume();
        timer.resume();
        timer2.resume();
        value = true;
        jButton_stop.setText("Stop");
    }

しかし、「停止」ボタンをクリックするとすべてのスレッドが完全に停止しますが、「開始」ボタンを押してもスレッドが再開されません.なぜ?? 私を助けてください。

4

2 に答える 2

4

tは のインスタンスであると考えてくださいThread:

スレッドを複数回開始することは決して合法ではありません。特に、実行が完了すると、スレッドは再開されない場合があります。

http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.htmlから

そして、Thread.stop()非推奨です。

boolean runスレッド自体は、変数のチェックやスレッド通信用のオブジェクトの使用など、終了する必要があるかどうかをチェックする必要があります。

于 2013-09-10T00:45:51.620 に答える
1

ブール値に基づいて、待機状態を維持できます。次に例を示します。

 public void run() {
      try {
      for(int i = 15; i > 0; i--) {
         System.out.println(name + ": " + i);
         Thread.sleep(200);
         synchronized(this) {
            while(suspendFlag) {
               wait();
            }
          }
        }
      } catch (InterruptedException e) {
         System.out.println(name + " interrupted.");
      }
      System.out.println(name + " exiting.");
   }

ここで、スレッド外で suspendFlag ステータスを変更できます。ここを参照

于 2013-09-10T00:47:38.040 に答える