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

sno*_*orp 1 java swing

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

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

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

Jef*_*rey 5

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

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

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