開始しているスレッドは何もしていません。a.start()
このスレッドを実行するためのコードがないため、呼び出すとすぐに終了します。これに続いて、新しいスレッドを開始し、クリック イベントを処理している同じスレッドが無限ループに入り、ユーザー インターフェイスが完全にブロックされます。
新しいスレッドを実行するには、いくつかのコードを指定する必要があります。これを行うには、スレッド a を渡すか、スレッドのメソッドRunnable
をオーバーライドします。run()
たとえば、Runnable
2 秒ごとに出力するループを含む を指定するには、次のようにします。
final Thread a = new Thread(new Runnable() {
@Override public void run() {
while (true) {
try {
Thread.sleep(2000);
System.out.println("code");
} catch (InterruptedException e) {
break;
}
}
}
};
a.start();
その後、そのスレッドを停止したい場合は、スレッドへの参照をa
フィールドなどに保存してから、 を呼び出す必要がありますa.interrupt()
。これによりsleep
がスローInterruptedException
され、キャッチされて が実行break
され、無限ループが終了し、スレッドがrun
メソッドの最後に到達してスレッドが終了します。
例えば:
private Thread a = null;
... click handler on start button ... {
if (a == null) {
a = new Thread(new Runnable() {
@Override public void run() {
while (true) {
try {
Thread.sleep(2000);
System.out.println("code");
} catch (InterruptedException e) {
break;
}
}
}
};
a.start();
}
}
... click handler on "stop" button ... {
if (a != null) {
a.interrupt();
a = null;
}
}