我几乎可以肯定这是不可能的,但值得一试。
我正在为某个工具编写命令行界面。我在谈论一个调用另一个Java应用程序的Java应用程序。该工具在执行后调用System.exit
,这反过来终止了我自己的执行环境。我不希望这样。
有没有办法忽略System.exit
次来电?
答案 0 :(得分:18)
是的,这可以使用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
}
}
在课堂上使用以下电话:
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()
}
}
答案 1 :(得分:2)
将SecurityManager设置为忽略System.exit(),除非它来自您的代码。
答案 2 :(得分:2)
您可以将应用程序分为两部分。第一个由工具启动。然后,将应用程序的第二部分作为新进程启动。然后主机应用程序终止你的第一部分,但第二部分仍在运行。
这样,你的应用程序的第一部分就是第二部分的启动,而第二部分又是你真正的应用程序。
答案 3 :(得分:1)
关于this (@Vonc answer),您应该使用安全管理器:
尝试修改TestCase以运行 一个阻止的安全管理器 调用System.exit,然后捕获 SecurityException异常。