Я разрабатываю приложение Java Scoreboard для своей работы. Он использует MySQL для хранения значений оценки, а приложение Java обращается к ним и отображает их на проекторе. До сих пор мне удалось создать приложение Java с помощью Swing. Я показываю все оценки с помощью 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' вы можете« остановить »это, когда захотите. Я также проверил [Concurrency in Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/), так как у вас есть некоторые потенциальные нарушения EDT, которые происходят там ... – MadProgrammer