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

标签 java swing user-interface label components

我遇到一个问题,当程序繁忙时,我的 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

最佳答案

I'm having a problem where my Swing GUI components aren't updating for me while the program is busy.

这是因为您正在事件调度线程 (EDT) 上执行一个长时间运行的任务,并且 GUI 无法在任务执行完成之前重新绘制自身。

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

关于java - Swing GUI 在数据处理期间不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025901/

相关文章:

c# - Java 产品甚至可以在没有 JVM 的电脑上运行 - 如何?

java, swing - 在 JScrollPane 中添加 JlayeredPane 仅显示空白背景

java - Java 中的太空入侵者...组件或绘制

java - 混合 Java 5.0 和 Java 6.0 代码

java - 从 if/if else 语句中调用方法

java - 字符串数组不显示在 JOptionPane 中

python - 如何从 GUI 接收输入,应用功能,然后显示?

.net - 用户界面允许 700 多种选择

java - 如何获取0-1背包中选中的元素列表?

java - 使用 UIManager 更改 JTextField 的边框