質問の短いバージョンがあります:
- 私はそのようなスレッドを開始します:
counter.start();
、ここcounter
でスレッドです。 - スレッドを停止したい時点で、次のようにします。
counter.interrupt()
- 私のスレッドでは、定期的にこのチェックを行います
Thread.interrupted()
。true
それがスレッドから私を与えreturn
、その結果、それが停止した場合。
そして、必要に応じて、ここにいくつかの詳細があります:
詳細が必要な場合は、こちらをご覧ください。ディスパッチスレッドの発明から、次のようにカウンタースレッドを開始します。
public static void start() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showGUI();
counter.start();
}
});
}
スレッドは次のように定義されています。
public static Thread counter = new Thread() {
public void run() {
for (int i=4; i>0; i=i-1) {
updateGUI(i,label);
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
// The time for the partner selection is over.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(partnerSelectionPanel);
frame.add(selectionFinishedPanel);
frame.invalidate();
frame.validate();
}
});
}
};
スレッドは「最初の」ウィンドウでカウントダウンを実行します(ホームに残っている時間が表示されます)。時間制限が過ぎた場合、スレッドは「最初の」ウィンドウを閉じて、新しいウィンドウを生成します。次のようにスレッドを変更したい:
public static Thread counter = new Thread() {
public void run() {
for (int i=4; i>0; i=i-1) {
if (!Thread.interrupted()) {
updateGUI(i,label);
} else {
return;
}
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
// The time for the partner selection is over.
if (!Thread.interrupted()) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(partnerSelectionPanel);
frame.add(selectionFinishedPanel);
frame.invalidate();
frame.validate();
}
});
} else {
return;
}
}
};
追加した:
いくつかの理由で動作しません。スレッドを中断するメソッドがあります:
public static void partnerSelected() {
System.out.println("The button is pressed!!!!");
counter.interrupt();
}
このメソッドは、ボタンが押されたときにアクティブになります。ボタンを押すと、ターミナルに対応する出力が表示されます(したがって、このメソッドがアクティブになり、何かが実行されます)。しかし、いくつかの理由により、スレッドを中断しません。スレッドのコードは次のとおりです。
public static Thread counter = new Thread() {
public void run() {
for (int i=40; i>0; i=i-1) {
if (Thread.interrupted()) {
System.out.println("Helloo!!!!!!!!!!!!!!!");
return;
}
updateGUI(i,label);
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
// The time for the partner selection is over.
if (Thread.interrupted()) {
System.out.println("Helloo!!!!!!!!!!!!!!!");
return;
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(partnerSelectionPanel);
frame.add(selectionFinishedPanel);
frame.invalidate();
frame.validate();
}
});
}
};
PS「こんにちは!!!!!!!!!!!!!」が表示されません ターミナルで...