1

我用 Java 编写了一个漂亮的东西,它带有一个包含一个 JDialog 的 GUI,它开始时相当小,然后使用 pack() 来容纳程序稍后放入其中的东西。所有这些都在 JDialog 呈现之前进行。

然后,令我惊讶的是,大约 80% 的时间,当我运行它时,窗口无法调整大小。它似乎完全是随机的,因为理论上它每次都在做完全相同的事情。为什么它会在五秒钟后在同一台机器上用相同的代码做不同的事情?

顺便说一句,当我为这个 GUI 启用本机 Windows 外观时,就会出现这个问题。

4

1 回答 1

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

于 2011-03-16T12:58:36.773 回答