Java Swing应用程序在正常模式下运行时会挂起,但在调试模式下运行正常

时间:2010-05-07 01:36:59

标签: java swing

我正在编写一个带有Swing前端的基本Java应用程序。基本上,它通过Apache Cayenne从Derby数据库加载一些数据,然后将其显示在JTable中。我正在Eclipse中进行开发,我认为这不重要,但我使用Maven作为依赖项。

现在,当我使用Debug运行时这很好用,但是当我使用Run按钮时它似乎挂起了显示线程。我做了一个线程转储,我不是100%肯定,但一切看起来都不错。我使用了Java VisualVM,线程看起来也很好。

奇怪的是它似乎间歇性地工作。虽然很容易重现,但它非常一致。如果有人有任何想法,我就全都不在了。

1 个答案:

答案 0 :(得分:5)

使用Maven或Eclipse for Swing应用程序不应该是一个问题。我们一直这样做,没有任何问题。你说你不是百分之百,线程的一切看起来都很好,所以发布你的线程会很有用,特别是当你的应用程序被挂起时 - 你可能会陷入僵局。

你说这种情况间歇发生的事实让我相信这是一个线程问题。运行的调试器可能导致线程以不同的方式运行,这就是它可能在调试模式下工作的原因。由于Swing不是线程安全的,因此在事件调度线程上不执行GUI更新通常会导致Swing线程问题。任何直接或间接更新swing组件的操作(意味着如果它更新表模型然后更新表)必须在事件派发线程上完成

如果你可以缩小应用程序冻结时调用的代码块,你应该发布,如果可以,那也是有用的。