我在Java中编写了一个漂亮的东西,其中包含一个GUI,它包含一个相当小的JDialog,然后使用pack()来容纳后来编程的东西。所有这一切都在JDialog渲染之前进行。
然后,令我惊讶的是,大约80%的时间,当我运行它时,窗口无法调整大小。它似乎完全是随机的,因为它理论上每次都做同样的事情。为什么在地球上它会在五秒钟后在同一台机器上使用相同的代码执行不同的操作?
顺便提一下,当我为此GUI启用本机Windows外观时,会弹出此问题。
答案 0 :(得分:5)
根据我的经验,当GUI执行这样的随机有趣的事情时,它可能是在Event Dispatch Thread上没有进行所有GUI调用的症状。
确保来自非GUI线程的所有GUI调用都包含在SwingUtilities.invokeLater或invokeAndWait中。
快速谷歌搜索似乎是一种非常好的方式来检查您的应用程序是否符合EDT规则:http://thejavacodemonkey.blogspot.com/2007/08/using-aspectj-to-detect-violations-of.html