8

JRE 更新后出现问题。

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

在 JRE 更新之前,在JRE 1.6.0_26上一切正常。我首先在JRE 1.6.0_36上遇到了这个问题。但它也发生在 1.6.0_39 上。

PS:我有 Windows Server 2008 R2 Interprise

有没有人有同样的问题或可以建议在这种情况下该怎么做?谢谢。

更新: 我已经实现了以下附加钩子:

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);
}
});

之后,具有此类附加挂钩的应用程序在系统重新启动时正常关闭,但我发现如果我们只是关闭应用程序(通过按退出或“x”)Java VM 不会终止(我们可以在 taskmgr 中看到 javaw 进程)。

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

更新 2: 已为此问题创建票证。我们收到了Oracle 的以下回复:“问题重现并确认。”

4

3 回答 3

5

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

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

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

如果您选择取消选项,我们将获得“强制重启”或“取消”选项,Java 控制面板挂起并且 javaw.exe 进程以 25% cpu 运行,这是在四处理器服务器上,所以我假设单个处理器,它将以 100% cpu 运行。

奥利弗

于 2013-02-07T17:19:54.097 回答
1

我能想到几件事:

1)您是否实现了shutdownhook(),当它从操作系统获得QUIT信号时可能会尝试做某事?

2)当你的应用程序挂起时,做一个线程转储(ctrl + break for windows-pls google?)并检查里面发生了什么。你应该得到一些线索。

3) Java 应用程序中仍然处于活动状态的非守护线程(如果有)也可能会阻止 JVM 退出。

于 2013-02-13T02:42:59.197 回答
0

这个问题由 Oracle 修复。修复将包含在即将发布的 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 Machine 在当前版本的 JRE 中拒绝在 System.exit(0) 之后停止。

于 2013-02-21T09:51:35.767 回答