gpt4 book ai didi

Java 不在循环内更新文本区域

转载 作者:行者123 更新时间:2023-12-01 12:32:08 26 4
gpt4 key购买 nike

嘿。

在以我(java newbe)无法理解的方式寻找这个答案之后,我决定询问。我的程序由一个 Form JFrame 组成,其中带有一个启动例程的按钮。

  1. JChooser 获取文件夹
  2. 获取该文件夹中所有文件的列表

开始一个for(循环) 3. 解压缩每个文件 (.tgz) 的过程。展开的 tgz 会显示一个 .tar 4. 展开 tar 的 Processo。 5. 从 .tar 获取 .csv 文件并进行一些更改的另一个过程。结束 for

所有这些都在 (private void btPegaDirActionPerformed(java.awt.event.ActionEvent evt)) 内。但我有一个文本区域(名称为 txtDisplay),它仅在洞处理后更新。好的,我知道 Swing 必须有一个外部进程,以便在进程结束时实时更新(即 unpiz #1、unzip #2、更改 CSV),但我不知道如何创建外部进程。

这是代码。

private void btPegaDirActionPerformed(java.awt.event.ActionEvent evt) {
JCHooser....
Get file to array (between 28 to 32 files)

for (File arqTGZ : files) {
try {

unzip tgz (unfolds a tar)
System.out.println("Unzip OK")
(must updata java textarea here)

unzip tar (unfolds a csv)
System.out.println("Unzip OK")
(must updata java textarea here)

change CSV
System.out.println("CSV Saved")
(must updata java textarea here)

}
}
}

就是这样。有人可以帮我吗?

最佳答案

如果没有UI/Event Dispatch Thread 上完成循环,则循环正常。 - 如果直接在 UI/EDT 线程上完成长任务,则所有渲染/交互都将停止,直到操作完成,使应用程序“卡住”。

使用 SwingWorker as covered in this trail创建一个后台线程/工作线程来实现任务。然后使用bound properties并连接 UI 以监听来自后台工作人员的适当状态。 firePropertyChange 中介绍了此方法(在自定义属性上使用 SwingWorker class documentation 除外)。 ,作为 PrimeNumbersTask。

紧要关头SwingUtilities.invokeLater可以手动用于将“必须更新”包装在后台线程内,以便 UI 操作在 EDT 上完成。但是,由于这会增加工作器实现和 UI 之间的耦合,因此应该首选绑定(bind)属性。

确保support cancelation并防止多个并发 SwingWorkers 处理同一任务的[意外]执行。

关于Java 不在循环内更新文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854858/

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