java - 如何防止对 System.exit() 的调用终止 JVM?

标签 java

我几乎可以肯定这是不可能的,但值得一试。

我正在为某个工具编写命令行界面。我说的是调用另一个 Java 应用程序的 Java 应用程序。该工具在执行后调用System.exit,这反过来又终止了我自己的执行环境。我不想那样。

有什么方法可以忽略 System.exit 调用?

最佳答案

是的,这可以使用 SecurityManager。试试下面的

class MySecurityManager extends SecurityManager {
  @Override public void checkExit(int status) {
    throw new SecurityException();
  }

  @Override public void checkPermission(Permission perm) {
      // Allow other activities by default
  }
}

在您的类(class)中使用以下调用:

myMethod() {
    //Before running the external Command
    MySecurityManager secManager = new MySecurityManager();
    System.setSecurityManager(secManager);

    try {
       invokeExternal();
    } catch (SecurityException e) {
       //Do something if the external code used System.exit()
    }
}

关于java - 如何防止对 System.exit() 的调用终止 JVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5549720/

相关文章:

java - 图像管理,图像数组

java - 如何修复错误 404 : The origin server did not find a current representation for the target resource

java - Spring boot @RequestBody with @Valid- ExceptionHandler for MethodArgumentNotValidException

java - 如何在java中使用递归查找常见后缀

java - 如何避免 Selenium 中的 “StaleElementReferenceException” ?

java - Arrays.binarySearch() 如何在不排序的情况下工作

java - 如果我使用 Java 8 的 String.codePoints 获取一个 int codePoints 数组,数组的长度是字符数吗?

java - 使用 Spring Web MVC validator 类的服务器端验证

java - 获取 byte[] 数组的 float[] View

Java TCP : How to abort/stop the receiver from waiting for sender data after timeout