2011-11-08 6 views
0

run()が終了しておらず、外部から呼び出された場合は、まず実行中のシュレッドを終了する必要があります。このコンテキストでinterrupt()を使用する方法

public class EnvTime extends Thread { 
    public void run() { 
     long step = 2000/benvelope1.length; 
     while (!finished) { 
      for (int i = 0; i < benvelope1.length; i++) { 
       envOut = benvelope1[i]; 
       try { 
        Thread.sleep(step); 
       } catch (InterruptedException benvelope1) { 
        benvelope1.printStackTrace(); 
       } 
      } 
     } 
    } 
} 

だから、私は別の方法から、このコードを呼び出す:

Env interpol; 

interpol.interrupt(); // 

interpol=new EnvTime(); 

interpol.start(); 

しかし、これはそれはあなたが達成しようとしているものは明らかではありません...

答えて

1

を作業していて、実行していません

Env interpol; 

interpol.interrupt(); // 

あなたはおそらくNullPointerExceptionになります。あなたはあなたのコードが

} catch (InterruptedException benvelope1) { 
    ... 
} 

に到達したい場合は、あなたがそれを中断する場合、具体的Thread.sleep方法では、スレッドがtry - ブロックであることを確認する必要があります。

つまり、少なくともスレッドを中断する前にを開始する必要があります。

0

コードのどこかでfinishedを変更する必要があります。この方法のように :

 try { 
      Thread.sleep(step); 
     } catch (InterruptedException benvelope1) { 
      finished = true; 
      benvelope1.printStackTrace(); 
     } 

たぶん、あなたはまた、スレッドが本当に新しいものを開始する前に終了したことを待つ必要があります。参加を使用:

interpol.interrupt(); 
interpol.join(); 
interpol=new EnvTime(); 
interpol.start(); 
+0

ありがとう、私はそれを試みます。何らかの理由でスレッドが終了するのを待つことができません。私は仕上げを強制する必要があります – menemenemu

関連する問題