下面一行:
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/