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/24084102/

相关文章:

java - 错误: No mapping found for HTTP request with URI spring mvc without xml

java - 现代 Java 如何优化自分配?

java - 更新 SwingWorker 内部或外部的按钮?

java - JScrollPane 似乎在从右到左的方向上工作不正确,但我不太确定如何

java - 我们如何在 Swing 中的两个面板之间画一条线

java - 发送时发生异常,javax.mail.MessagingException : 530 5. 7.57 SMTP;客户端未通过身份验证,无法在 MAIL FROM 期间发送匿名邮件

java - 使用 Hibernate 标准进行分页

java - 我的 Java 程序没有在整个窗口上绘制矩形

c++ - MFC 对话框按钮显示为黑框

c++ - 具有相同按钮文本的按钮使用 "dear imgui"