如果当前线程有权限退出Java虚拟机
If the current thread has the authority to exit Java virtual machine
我正在尝试 class SecurityManager
。我想查看当前线程是否有权限退出Java虚拟机。下面是我想出的代码。
SecurityManager appsm = System.getSecurityManager();
System.out.println("something");
appsm.checkExit(0);
我原以为 SecurityManager.checkExit
会抛出一个 SecurityException
。但是,IDE 反而输出 NullPointerException
.
Exception in thread "main" java.lang.NullPointerException
at jtotheplatformenvironment.JTOThePlatformEnvironment.main(JTOThePlatformEnvironment.java:40)
C:\Users\Justin\AppData\Local\NetBeans\Cache.1\executor-snippets\run.xml:53: Java returned: 1
为什么会这样?
您需要使用额外参数执行 Java 应用程序:
-Djava.security.manager
因此 JVM 将使用内置的默认安全管理器 (source) 启动,否则不会创建安全管理器,这就是您获得 NPE 的原因。
根据 oracle documentation,您可以使用下面的 API in System
class
设置 SecurityManager
public static void setSecurityManager(SecurityManager s)
Sets the System security.
If there is a security manager already installed, this method first calls the security manager's checkPermission method with a RuntimePermission("setSecurityManager") permission to ensure it's ok to replace the existing security manager. This may result in throwing a SecurityException.
否则,参数被确立为当前的安全管理器。如果参数为 null 且未建立安全管理器,则不采取任何操作,方法只是 returns.
我正在尝试 class SecurityManager
。我想查看当前线程是否有权限退出Java虚拟机。下面是我想出的代码。
SecurityManager appsm = System.getSecurityManager();
System.out.println("something");
appsm.checkExit(0);
我原以为 SecurityManager.checkExit
会抛出一个 SecurityException
。但是,IDE 反而输出 NullPointerException
.
Exception in thread "main" java.lang.NullPointerException
at jtotheplatformenvironment.JTOThePlatformEnvironment.main(JTOThePlatformEnvironment.java:40)
C:\Users\Justin\AppData\Local\NetBeans\Cache.1\executor-snippets\run.xml:53: Java returned: 1
为什么会这样?
您需要使用额外参数执行 Java 应用程序:
-Djava.security.manager
因此 JVM 将使用内置的默认安全管理器 (source) 启动,否则不会创建安全管理器,这就是您获得 NPE 的原因。
根据 oracle documentation,您可以使用下面的 API in System
class
SecurityManager
public static void setSecurityManager(SecurityManager s)
Sets the System security.
If there is a security manager already installed, this method first calls the security manager's checkPermission method with a RuntimePermission("setSecurityManager") permission to ensure it's ok to replace the existing security manager. This may result in throwing a SecurityException.
否则,参数被确立为当前的安全管理器。如果参数为 null 且未建立安全管理器,则不采取任何操作,方法只是 returns.