我想讓這個按鈕禁用其他兩個按鈕,並同時執行一些圖形。這是我想的第一件事:我正確地說明一件事情爲什麼會起作用,爲什麼我之前所做的事情不起作用? (關於線程)
public void actionPerformed(ActionEvent arg0) {
reset.setEnabled(false);
switcher.setEnabled(false);
for (int i = 0; i < 10; i++){
a.change();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
}
}
所以這是按鈕我試圖代碼和切換器和復位的actionPerformed方法的按鈕,我禁用和a.change()應該引起視覺效果。當我嘗試這樣做時,整個程序停止了十秒鐘,然後按鈕被禁用,在這十秒鐘內沒有視覺效果。然後我想:
public void actionPerformed(ActionEvent arg0) {
reset.setEnabled(false);
switcher.setEnabled(false);
if (!s.isAlive()){
s = new Thread(new Changer());
s.start();
}
else{
s.interrupt();
}
}
在哪裏換爲:
private static class Changer implements Runnable {
public void run() {
for (int i = 0; i < 10; i++){
a.change();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
}
}
}
這個工作正是我想要的,與按鈕立即被禁用,其次是視覺效果。這樣做的原因是,actionperformed的所有效果都會在退出函數時激活,所以第一種方式是,動作執行結束的時間爲10秒,並且它會在最後執行禁用和10個a.change()s ?第二種方式是在啓動s之後解析,所以按鈕被禁用,然後s繼續並在actionperformed結束後執行它的效果?
我不知道你在這裏問什麼。 –
Swing提供了Timer類來完成你想要做的事情:http://docs.oracle.com/javase/6/docs/api/javax/swing/Timer.html – kdgregory