【问题标题】:Handling JVM thrown exceptions during initialization在初始化期间处理 JVM 抛出的异常
【发布时间】:2012-01-05 00:28:14
【问题描述】:

我有一个 java 进程通过以下方式启动另一个启用了 JMX 支持的 java 进程

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

知道如何处理这个用例吗?

【问题讨论】:

  • 是否会记录到 stderr (System.err)?如果是这样,您可以让启动过程查找并报告错误。
  • 如果我没记错的话,由于这个 BindException,你的 jvm 不应该首先启动,那你为什么需要调用 System.exit(...)?

标签: java exception-handling jvm


【解决方案1】:

您应该将 stderr(可能还有 stdout)从您的子进程重定向到父进程或 System.err (System.out)。 更多详情请关注https://stackoverflow.com/a/1570269/1137529

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2020-10-17
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 2011-04-16
      相关资源
      最近更新 更多