当前位置: 首页 > 面试题库 >

Java 从API阻止System.exit()

文英达
2023-03-14
问题内容

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


问题答案:

基本上,它会安装一个安全管理器,该安全管理器会使用此处的代码禁用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 ) ;
  }


 类似资料:
  • 问题内容: 我对Go如何处理非阻塞IO感到困惑。API在我看来基本上是同步的,并且在Go上观看演示时,听到诸如“和调用块”之类的注释并不罕见。 从文件或网络读取时,Go是否使用阻塞IO?还是当在Go Routine中使用某种魔术来重写代码? 来自C#背景,这感觉非常不直观,在C#中,当使用异步API时我们使用了关键字。这清楚地表明,API可以产生当前线程,并在以后的延续中继续。 因此,TLDR;当

  • 我有一个在两个docker容器上运行的应用程序,一个前端(react.js)和一个后端(java、Spring)。 我已经安装并运行了这些容器,可以验证它们是否可以通过ping相互通信。 注意到这个问题后,我研究了一下,发现了一个问题,一个用户gok提供了一些有用的信息和到spring文档的链接,这些信息非常丰富。 在发现问题是CORS问题之前,我已经按照前面问题中的指示将更改应用到后端代码。 因

  • 我正在使用Spring Boot和Spring Security开发一个Rest Api。我有公共和私人区域,我使用Spring Security进行身份验证(用于私人区域)。 问题是,我配置了CORS,如果我从未经授权的url调用公共endpoint,它会阻止请求,但我很惊讶,如果我从Postman或其他使用RestTemplate的Spring Boot应用调用它,CORS不会阻止请求并返回结

  • 问题内容: 我已经为我的应用程序制作了GUI。JFrame有2个JPanel,panel1和panel2。panel1就是这样,带有自定义绘画的JPanel每5毫秒重新绘制一次。 panel2是我第一次尝试CardLayout实现:它包含JPanels subPanel1和subPanel2。subPanel1包含一个JComboBox并添加到panel2:中。 subPanel2有命令,我在其中

  • 问题内容: 根据Java线程状态信息,调用wait()将导致线程进入BLOCKED状态。但是,这段代码将导致(在调用之后)处于等待状态的线程。 我有什么问题吗?有人可以向我解释这种行为吗?任何帮助,将不胜感激! 问题答案: 线程在等待通知。然后,它变为BLOCKED,试图重新进入同步区域,直到所有其他线程都离开。 您发布的链接中的有关部分(关于WAITING): 例如,在某个对象上调用Object