一尘不染

Java 从API阻止System.exit()

java

我使用的第三方库System.exit()在遇到异常时会执行a 。我从jar里使用API​​。无论如何,System.exit()由于它导致我的应用程序关闭,我可以阻止该调用吗?System.exit()由于其他许多许可问题,在删除后我无法反编译和重新编译jar 。我曾经在stackoverflow中遇到一个[我不记得的其他问题]的答案,我们可以使用SecurityManagerJava来做这样的事情。


阅读 553

收藏
2020-03-18

共1个答案

一尘不染

基本上,它会安装一个安全管理器,该安全管理器会使用此处的代码禁用System.exit()

  private static class ExitTrappedException extends SecurityException { }

  private static void forbidSystemExitCall() {
    final SecurityManager securityManager = new SecurityManager() {
      public void checkPermission( Permission permission ) {
        if( "exitVM".equals( permission.getName() ) ) {
          throw new ExitTrappedException() ;
        }
      }
    } ;
    System.setSecurityManager( securityManager ) ;
  }

  private static void enableSystemExitCall() {
    System.setSecurityManager( null ) ;
  }
2020-03-18