2013-02-05 70 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()與測試應用程序掛鉤,看起來像現在起作用。現在我將嘗試在真實應用中做同樣的事情。 –

相關問題