Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果当前线程有权退出Java虚拟机_Java_Multithreading_Securitymanager - Fatal编程技术网

如果当前线程有权退出Java虚拟机

如果当前线程有权退出Java虚拟机,java,multithreading,securitymanager,Java,Multithreading,Securitymanager,我正在尝试类SecurityManager。我想检查当前线程是否有权退出Java虚拟机。下面是我想出的代码 SecurityManager appsm = System.getSecurityManager(); System.out.println("something"); appsm.checkExit(0); 我希望SecurityManager.checkExit抛出SecurityException。但是,IDE反而输出了NullPointerException Exception

我正在尝试类
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\8.1\executor-snippets\run.xml:53: Java returned: 1

为什么会发生这种情况?

您需要使用一个额外的参数来执行Java应用程序:

-Djava.security.manager
因此,JVM将使用内置的默认安全管理器()启动,否则不会创建安全管理器,这就是为什么您会获得NPE。

根据oracle,您可以通过在
系统
类中使用下面的API设置
安全管理器

public static void setSecurityManager(SecurityManager s)
设置系统安全性

如果已经安装了安全管理器,则此方法首先使用RuntimePermission(“setSecurityManager”)权限调用安全管理器的checkPermission方法,以确保可以替换现有的安全管理器。这可能导致引发SecurityException


否则,参数将被建立为当前安全管理器。如果参数为null且未建立安全管理器,则不执行任何操作,该方法只返回。

java默认情况下不使用安全管理器运行,因此您将获得一个NPE。您必须在启用SecurityManager的情况下启动程序。@非常感谢您的建议!如何在程序开始时启用SecurityManager?