2012-01-05 90 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。

相关问题