2012-01-05 89 views
0

期間我有一個java程序開始以下列方式支持JMX支持另一個Java進程處理JVM拋出的異常初始化

java -Dcom.sun.management.jmxremote.port=8088 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -jar app.jar 

我的問題是,如果8088端口在使用中,衍生進程的JVM會拋出BindException並且JVM將正常退出。由於綁定異常,我無法向流程報告產生的進程未啓動。如何捕獲/處理由JVM拋出的BindException,以便生成的進程可以執行System.exit(VALID_ERROR_CODE)?即使在任何控件傳遞給用戶代碼之前,這種異常都會發生,所以我想不可能在用戶代碼中處理它。

任何想法如何處理這個用例?

+1

是否記錄到stderr(System.err)?如果是這樣,您可以讓啓動過程查找並報告錯誤。 – Bill 2012-01-05 00:35:41

+1

如果我沒有記錯,由於這個BindException你的jvm不應該在第一個地方開始,那麼爲什麼你需要調用System.exit(...)? – kosa 2012-01-05 05:44:23

回答

0

在啓動子進程之前檢查端口是否打開是否可行?即嘗試偵聽端口,如果您的套接字失敗,則知道該端口不可用。這個解決方案的優點是你可以生成一個新的端口號並繼續測試,直到你找到一個開放的端口。一旦有了有效的端口,就可以修改調用以使用可用端口啓動子JVM。

相關問題