2013-02-05 141 views
8

JRE更新后出现问题。Java应用程序在JRE更新后阻止服务器重新启动

如果我已启动Java应用程序并启动系统重新启动 - Windows无法自动停止此Java应用程序,并且我收到以下消息: “此程序阻止Windows重新启动”。 如果我按取消,那么我可以看到防止重新启动的Java应用程序挂起。 此问题影响我的Java应用程序和jconsole等应用程序。

在JRE更新之前一切正常JRE 1.6.0_26。 我第一次遇到这个问题JRE 1.6.0_36。但它也发生在1.6.0_39。

P.S:我有Windows Server 2008 R2是Interprise

有没有人有同样的问题,或者可以建议哪些在这种情况下怎么办? 谢谢。

更新: 我已经实现以下addhook:

Runtime.getRuntime().addShutdownHook(new Thread() { 
public void run() { 
logger.log("SHUTDOWN - BEGIN"); 
((Window) view).setVisible(false); 
logger.log("SHUTDOWN - Visible"); 
((Window) view).dispose(); 
logger.log("SHUTDOWN - Dispose"); 
System.exit(0); 
} 
}); 

这样的addhook应用程序后正常关闭,系统重启,但我想通了,如果我们只是关闭程序(按退出或“x”)Java VM没有终止(我们可以在taskmgr中看到javaw进程)。

从日志文件我可以看到程序从不离开dispose()函数。如果我评论dispose()并且只保留System.exit(0)Java VM仍然无法终止。

更新2: 已为此问题创建票证。我们收到了以下来自的回复Oracle:“问题得到转载和确认。”

+0

这发生在所有Java应用程序或其中的一些? – matts

+0

正如我之前提到的,这发生在所有测试的应用程序(我们和三维方) –

+0

你看看你的处理方法在做什么?它可能会给出一些线索 –

回答

0

此问题由Oracle修复。 Fix将包含在即将推出的JRE版本(1.6.0_42?)中。

作为解决方法对于您的应用程序可以使用addhook。事情是这样的:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { 
    ((Window) view).setVisible(false); 
    Runtime.halt(0); 
    } 
    }); 

您应该使用Runtime.halt(0),而不是System.exit(0),因为Java机拒绝System.exit后停止(0)JRE的当前版本。

+0

我不认为你有这个错误ID?我遇到了类似的问题,我想仔细查看这个错误以检查它的匹配,但是我在bugs.java.com上找不到它。谢谢! – trepidacious

5

matts,这发生在所有的Java应用程序上,它已经通过一个只有2008 OS和JRE 6U37的服务器进行了测试。如果我们启动Java控制面板,然后尝试重新启动服务器,我们将获得Windows消息。

如果应用程序最小化,我们不会收到消息。

消息“此程序阻止Windows重新启动”

我们得到“强制重启”或“取消”如果你把取消选项,Java控制面板挂起和javaw.exe进程是选项在25%cpu下运行,这是在一个四核处理器服务器上,所以我假设在一个处理器上这将运行在100%CPU。

奥利弗

+0

看起来像解决方案,尽量减少我们的应用程序的作品,但仍不知道如何处理第三方。 –

1

我能想到的几件事情:

1)你有shutdownhook()来实现,可能是试图做一些事情,当它得到一个从OS退出信号?

2)当你的应用程序挂起并检查里面发生了什么时,执行线程转储(ctrl + break for windows- pls google?)。你应该得到一些线索。3)非守护线程(如果有的话)仍然在Java应用程序中处于活动状态,这可能会阻止JVM退出。

+0

我实现了addhook,这个工程(当然可能只适用于我们的应用程序),但会引入新的问题。看看我的帖子中的更新。 –

+1

另请参阅halt()API http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#halt(int) –

+0

我测试了Runtime.halt()与测试应用程序挂钩,看起来像现在起作用。现在我将尝试在真实应用中做同样的事情。 –

相关问题