JDialog无法pack(),仅在某些情况下 [英] JDialog fails to pack(), only sometimes

查看:100
本文介绍了JDialog无法pack(),仅在某些情况下的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用Java编写了一个漂亮的东西,它的GUI包含一个JDialog,它最初很小,然后使用pack()容纳程序后放进去的东西.所有这些都是在JDialog渲染之前进行的.

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

顺便说一句,当我为此GUI启用本机Windows外观时,会弹出此问题.

解决方案

以我的经验,当GUI进行这样的随机有趣的事情时,可能是没有在事件调度线程上执行所有GUI调用的症状. /p>

确保所有来自非GUI线程的GUI调用都包装在SwingUtilities.invokeLater或invokeAndWait中.

快速的Google搜索发现了一种检查您的应用程序是否符合EDT规则的好方法: 解决方案

In my experience, when the GUI does random funny stuff like this, it might be a symptom of not doing all your GUI calls on the Event Dispatch Thread.

Make sure all your GUI calls from non-GUI threads are wrapped in SwingUtilities.invokeLater or invokeAndWait.

A quick google search turned up what seems to be a nifty way to check that your application conforms to the EDT-rules: http://thejavacodemonkey.blogspot.com/2007/08/using-aspectj-to-detect-violations-of.html

这篇关于JDialog无法pack(),仅在某些情况下的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆