Java - 来自 MySQL 的定期更新

标签 java swing jlabel event-dispatch-thread

我正在为我的工作开发一个记分板 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/

相关文章:

java - 更改java中特定位置的字符大小写

java - 循环调用 SwingUtilities.invokeAndWait

java - 多行 JLabels - Java

java - 匹配出现次数最多的字符串

java - 通过一个比较器插入树形图并根据java中的另一个比较器获取条目

java - 如何使用摘要列表

java - 如何将表单字段放入列表中以便能够迭代它们?

java - Nimbus 外观支持从 xml 加载配置吗

Java netbeans 绑定(bind)。如何刷新绑定(bind)..?

java - JLabels setPreferredSize 更改所有 JLabel 的大小,而不仅仅是一个?