2011-10-14 47 views
3

我有一个在大多数站点上运行OK的应用程序。但是,一个在Citrix Box上托管应用程序的站点似乎存在死锁问题。我在会议中运行了一个分析器并收到了一个惊喜。导致死锁的语句似乎是关闭JOptionPane对话框的语句。请参阅随附的显示屏。关闭JOptionPane导致Java Swing中的死锁

所以我有三个问题:

  1. 是我的理解是否正确?
  2. 任何想法为什么会发生这种情况。
  3. 我能在代码中做些什么来防止这种情况发生?

非常感谢您的帮助。

埃利奥特Profiler display

+1

-_- < - 我眯眼... – mre

+0

@mre和现在: - ) – mKorbel

+0

我可能会错过一些东西,但是什么让你觉得这是一个僵局? – Sean

回答

5

Swing不是线程安全的。也许你的应用程序从Event Dispatch Thread之外调用Swing GUI方法。

如果你可以减少到最小的样本,但仍然会重现问题,你可以1)自己找到原因,或者2)最终有更多的机会从别人那里获得帮助。

+1

*“仍然会再现问题的最小样本”*你是什么意思,就像[SSCCE](http://pscode.org/sscce) html的)? ;) –

+0

是的:-)。伟大的说明btw。 – Grodriguez

+0

仔细看显示。它看起来不像是从EventDispatchThead中调用的吗? – Elliott

4
  1. 不知道,但如果是..
  2. 调用GUI方法(更新GUI)关闭EDT。
  3. 在EDT上调用GUI方法。
+0

我投给'1。什么是不知道,但如果是这样的话。EventQueue#push()' – mKorbel