Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing应用程序在正常模式下运行时挂起,但在调试模式下运行良好_Java_Swing - Fatal编程技术网

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

Java Swing应用程序在正常模式下运行时挂起,但在调试模式下运行良好,java,swing,Java,Swing,我正在编写一个带有Swing前端的基本Java应用程序。基本上,它通过ApacheCayenne从Derby数据库加载一些数据,然后将其显示在JTable中。我在Eclipse中进行开发,我认为这并不重要,但我使用Maven作为依赖项 现在,当我使用Debug运行时,它可以正常工作,但当我使用run按钮时,它似乎挂起了显示线程。我做了一个线程转储,我不是100%肯定,但一切看起来都很好。我使用了JavaVisualVM,那里的线程看起来也不错 奇怪的是,它似乎断断续续地工作。但它非常一致,而且很

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

现在,当我使用Debug运行时,它可以正常工作,但当我使用run按钮时,它似乎挂起了显示线程。我做了一个线程转储,我不是100%肯定,但一切看起来都很好。我使用了JavaVisualVM,那里的线程看起来也不错


奇怪的是,它似乎断断续续地工作。但它非常一致,而且很容易复制。如果有人有任何想法,我都没有了。

你在Swing应用程序中使用Maven或Eclipse不应该是个问题。我们一直这样做,没有任何问题。您说您并不是100%认为线程的一切都很好,所以发布线程会很有用,特别是当您的应用程序挂起时——您可能遇到死锁

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


如果您可以缩小应用程序冻结时调用的代码块,那么如果可以,您应该发布该代码块,这也会很有帮助。

对于Swing应用程序,使用Maven或Eclipse不应该是一个问题。我们一直这样做,没有任何问题。您说您并不是100%认为线程的一切都很好,所以发布线程会很有用,特别是当您的应用程序挂起时——您可能遇到死锁

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


如果可以缩小应用程序冻结时调用的代码块范围,则应该发布该代码块(如果可以),这也会很有帮助。

+1用于事件调度线程。我还建议将默认的look-and-feel切换为Substance(),强制在EDT中执行与Swing相关的操作,否则应用程序会失败。这对我的调试很有用。Sweet-我知道检查EDT违规的不同方法,但不知道有这样的外观和感觉。虽然我可能不会依赖L&F来强制执行,因为L&F可以插拔。对我来说,这听起来像是违反了外观的责任……当然,但作为开发时检测问题的一种简单方法,它仍然很方便。+1用于事件调度线程。我还建议将默认的look-and-feel切换为Substance(),强制在EDT中执行与Swing相关的操作,否则应用程序会失败。这对我的调试很有用。Sweet-我知道检查EDT违规的不同方法,但不知道有这样的外观和感觉。虽然我可能不会依赖L&F来强制执行,因为L&F可以插拔。对我来说,这听起来像是违反了外观和感觉的责任……当然,但作为开发时检测问题的一种简单方法,它仍然很方便。