什么可能导致Java在返回后继续运行

时间:2011-09-27 13:57:20

标签: java jvm hang

当我进行一些特殊的GUI交互时,我遇到了这个问题。 这是我的情况:我使用一个对话框。我不打电话 System.exit()但稍后将返回给应用程序。 通常情况下,当JVM看不到它时,它就会存在 非deaemon线程正在运行。但使用此对话框后, 它不起作用。

我百分之百地保证在对话框中调用dispose() 有问题,也有关于申请的主要框架。 我在IDE和运行时都得到了这个 命令行。我可以用按钮按下来杀死它 IDE,或命令行中的Ctrl-C。

但是如果JVM正确终止它当然会更好 在交付申请之前本身。

任何线索,这是一个已知的问题吗?我使用的是JDK 1.7,但是 问题已在JDK 1.6中显示出来。

最好的问候

P.S。:只是阅读: http://download.oracle.com/javase/1.4.2/docs/api/java/awt/doc-files/AWTThreadIssues.html 过去也有过类似的问题。也许这是一个新问题。 过去的问题是: 其他包可以为内部需求创建可显示的组件,并且永远不会使它们不可显示。请参阅451505846710254465537。 我将沿着弹出菜单的显式setVisible(false)尝试一些。

4 个答案:

答案 0 :(得分:2)

你确定弹出窗口被破坏而不仅仅是隐藏吗?我相信默认操作是隐藏,并将默认关闭操作设置为JFRAME.EXIT_ON_CLOSE可能会解决它。

诊断问题的另一种方法可能是使用分析器,例如Netbeans附带的分析器。在应用程序终止之前使用实时视图和调试点,您可以检查实时对象。

答案 1 :(得分:1)

关闭框架时的默认操作是隐藏它。 UI线程仍然存在。

如果你希望JVM在关闭你制作的框架时退出(可能是你的“弹出窗口”?),你必须明确说出来,例如:通过frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,更多文档here。可能您只需要DISPOSE_ON_CLOSE作为defaultCloseOperation。

另一种方法是将windowListener添加到框架中,并在框架关闭时自行决定正确的操作。

答案 2 :(得分:0)

听起来至少有一个线程阻塞,无法响应中断。也许在有问题的线程上使用.getState()可能会对这个问题有所了解。

http://download.oracle.com/javase/6/docs/api/java/lang/Thread.html#getState%28%29

答案 3 :(得分:0)

我遇到同样的问题,在dispose()中调用EventQueue.invokeLater(new Runnable() {...}为我解决了