我几乎可以肯定这是不可能的,但值得一试.
我正在为某个工具编写命令行界面.我在谈论一个调用另一个Java应用程序的Java应用程序.该工具System.exit在执行后调用,这反过来终止了我自己的执行环境.我不希望这样.
有没有办法忽略System.exit电话?
the*_*ega 20
是的,这可以使用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
}
}
Run Code Online (Sandbox Code Playgroud)
在您的课程中使用以下调用:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
Java 17 更新:
这个问题的许多早期答案都提到了自定义的使用SecurityManager。这在当时是正确的。但从 Java 17 开始,System.setSecurityManager()已弃用并删除,因此这种方法将来不再适用。
| 归档时间: |
|
| 查看次数: |
14909 次 |
| 最近记录: |