在初始化期间处理JVM引发的异常

时间:2012-01-05 00:28:14

标签: java exception-handling jvm

我有一个java进程启动另一个java进程,并以下列方式启用JMX支持

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)?甚至在任何控件传递给用户代码之前就会发生这种异常,所以我想在用户代码中处理它是不可能的。

如何处理这个用例?

2 个答案:

答案 0 :(得分:2)

您应该将stderr(也可能是stdout)从子进程重定向到父进程或System.err(System.out)。 查看https://stackoverflow.com/a/1570269/1137529了解更多详情。

答案 1 :(得分:0)

在启动子进程之前检查端口是否打开是否可行?即尝试侦听端口,如果套接字失败,则表示端口不可用。此解决方案的优点是您可以生成新的端口号并继续测试,直到找到开放端口。获得有效端口后,可以修改调用以使用可用端口启动子JVM。