我正在爲我的工作開發Scoreboard Java應用程序。它使用MySQL存儲分數值,Java應用程序訪問它們並將它們顯示在投影儀上。到目前爲止,我已經設法使用Swing創建了一個Java應用程序。我使用jLabels顯示所有分數,以便在不完全重繪記分牌的情況下更新分數。Java - 從MySQL定期更新
現在,我需要讓記分牌定期更新。我試圖使用Thread.sleep
,但我不知道如何中斷該線程。我需要中斷線程的原因是,如果要在配置面板上更改記分板上顯示的條目數,則必須重新繪製記分牌以顯示正確的數字。
當前sleep
在代碼中正常工作,只要我不碰任何東西。但只要我改變ConfigPanel
中的任何內容,就會出錯。
package au.thewebeditor.scoreboard.apps;
import java.lang.*;
public class Program {
private static Scoreboard sb;
private static ConfigPanel cp;
public Program(){
sb = new Scoreboard();
cp = new ConfigPanel();
}
public static void redrawScoreboard() throws NullPointerException{
try{
sb.dispose();
} catch (NullPointerException e){
//DO NOTHING
}
sb = new Scoreboard();
try {
cp.toFront();
} catch (NullPointerException e) {
cp = new ConfigPanel();
}
constUpdates();
}
public static void showConfig(){
cp.setVisible(true);
cp.toFront();
}
public static void main(String[] arguments){
new Program();
constUpdates();
}
private static void constUpdates() {
boolean go = true;
while (go){
try {
Thread.sleep(5000);
Scoreboard.updateScores();
} catch (InterruptedException e) {
//DO nothing
}
}
}
}
當connfiguration已經改變redrawScoreboard()
被調用。
目前,redrawScoreboard
被調用時,它只是在隊列中,而constUpdates
保持計數到5000.如何中斷sleep
,以便我可以重新繪製記分牌。 sleep
甚至是最好的選擇嗎?或者我應該嘗試其他的東西?
查看'javax.swing.Timer',只要你喜歡就可以'停止'。我還會檢查[Swing中的併發](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/),因爲您還有一些潛在的EDT違規問題...... – MadProgrammer