And*_*ham 0 java systemexit securitymanager
我正在编写一个程序,我想循环遍历几个配置文件,并在每个文件中调用一个以该文件名作为参数的类,并等待它完成.目前我在做:
for (int i = 1; i <= 3; i++){
String[] a = new String[1];
a[0] = "data/config" + i + ".xml";
edu.cwru.sepia.Main2.class.getMethod("main", String[].class).invoke(null, (Object)a);
}
Run Code Online (Sandbox Code Playgroud)
然而,发生的情况是该类只被调用一次,然后整个程序停止.我认为类中有一个退出行,但由于它是一个JAR文件,我无法确定,我无法编辑它.
我们假设是这样的; 我该如何解决这个问题呢?也就是说,在调用以exiting结束之后,我的外部循环方法继续,并再次使用下一个参数调用该类.
如果问题确实是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 ) ;
}
Run Code Online (Sandbox Code Playgroud)
但是,出于您的目的,可能更简单的方法是为第三方应用程序生成单独的Java进程并等待它终止.这样您就不必担心第三方代码会导致JVM实例产生副作用,也不必担心如何摆脱副作用.