gpt4 book ai didi

Java - 来自 MySQL 的定期更新

转载 作者:行者123 更新时间:2023-12-02 07:01:37 25 4
gpt4 key购买 nike

我正在为我的工作开发一个记分板 Java 应用程序。它使用 MySQL 来存储分数值,Java 应用程序访问它们并将它们显示在投影仪上。到目前为止,我已经成功地使用 Swing 创建了一个 Java 应用程序。我使用 jLabels 显示所有分数,以便可以更新它们,而无需完全重新绘制记分板。

现在,我需要定期更新记分板。我尝试使用 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
}
}
}

}
<小时/>

当配置更改时,调用redrawScoreboard()

目前,当调用 redrawScoreboard 时,它只是位于队列中,而 constUpdates 一直计数到 5000。如何中断 sleep 这样我就可以重新绘制记分牌。 sleep 是最好的选择吗?或者我应该尝试其他方法?

最佳答案

  1. 您对Concurency in Swing有疑问,任何创建、更新、修改 Swing GUI 都必须在事件调度线程上完成,这可能是包装 sb.dispose() 的原因;通过抛出 NullPointerException 进入 try - catch

  2. Swing GUI 必须在 Initial Thread 上创建

  3. 没有理由重新创建新的 Top-Level Container每 5 次。秒,重用在应用启动时添加到容器的 JComponents

  4. 使用util.Timer调用SwingWorker ,

关于Java - 来自 MySQL 的定期更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16603236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com