java - 防止 Swing GUI 在调用既访问 Swing 组件又耗时的方法时无响应

标签 java multithreading swing swingworker

下面一行:

SwingUtilities.updateComponentTreeUI(aComponent);

使我的 GUI 无响应。

当调用此方法更新大部分 GUI 上的 laf 时,会花费大量时间,因此在此操作期间 GUI 会无响应。

由于此操作是在操纵 GUI,因此也不能为此使用 SwingWorker。 来自 SwingWorker 文档:

  • Time-consuming tasks should not be run on the Event Dispatch Thread. Otherwise the application becomes unresponsive.

  • Swing components should be accessed on the Event Dispatch Thread only.

但这里的问题是,该操作正在访问 Swing 组件并且非常耗时。

有什么好的方法可以防止这种无响应?

最佳答案

由于您所做的是更改 L&F,并且这可能会严重影响 GUI 的外观和可用性,因此问问自己您是否真的希望应用程序在此期间响应。使用 glass pane 显示消息(“请稍候...”或其他内容)可能会更好。 , 并在更新 L&F 时卡住 GUI。

现在,正如其他人所建议的那样,您可能想要调查为什么更新组件树如此缓慢。

关于java - 防止 Swing GUI 在调用既访问 Swing 组件又耗时的方法时无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5869399/

相关文章:

java - 如何编写Java代码以将文件传输到保留文件名的IBM MQ

java - 在类之间共享变量

java - 客户端-服务器应用程序无法正常工作

java - Android:glReadpixels 大于视口(viewport)?

java - 多线程之间的对象共享

java - 如何使用多线程允许多个客户端连接到服务器?

java - 使用Java在循环内并行执行方法

java - 在 Java JFrame 中绘制多个正方形并访问其中的每一个?

java - 如何让 JFileChooser 将文件夹视为目录?

java - Spring Portlet MVC 中的一系列重复表单