繁体   English   中英

Swing GUI在数据处理期间不会更新

[英]Swing GUI doesn't update during data processing

我有一个问题,我的Swing GUI组件在程序繁忙时没有为我更新。 我正在创建一个图像编辑器,并且在进行繁重的处理时,我尝试更改“状态”标签,同时使用户知道发生了什么。 标签直到处理完成后才会更新。

如何立即更新标签,而不必等待? 顺便说一下,我的标签都放在了JPanel上。

在for循环和以下方法完成之前,不会设置我的标签。

 labelStatus.setText("Converting RGB data to base 36...");

                            for (int i = 0; i < imageColors.length; i++) {
                                for (int j = 0; j < imageColors[0].length; j++) {
                                    //writer.append(Integer.toString(Math.abs(imageColors[i][j]), 36));
                                    b36Colors[i][j] = (Integer.toString(Math.abs(imageColors[i][j]), 36));
                                }
                            }
                            String[][] compressedColors = buildDictionary(b36Colors);//CORRECTLY COUNTS COLORS

我有一个问题,我的Swing GUI组件在程序繁忙时没有为我更新。

那是因为您正在Event Dispatch Thread (EDT)上执行长时间运行的任务,并且GUI在任务完成执行之前无法重新绘制自身。

您需要在单独的线程或SwingWorker中执行长时间运行的任务(以获得更好的解决方案)。 阅读Swing 并发教程中的这一节,以获取有关EDT更多信息以及使用SwingWorker防止此问题的示例。

你可以做这样的事情,不是最好的,但是它可以给你一些想法

创建一个线程调度程序类,并从主类中调用它

public class ThreadDispatcher implements Runnable { 

public ThreadDispatcher() {

}

public void run() {

        //call the method related heavy process here 

    }     

}  

在你的主要班级可能就是这样

 Thread thread = new Thread(new ThreadDispatcher());
 thread.start();
 sleep(100);

赶上InterruptedException ex。

并检查Java线程示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM