У меня есть следующиеКак я могу «захватить» System.exit (-1) из другого потока?
System.setSecurityManager(new SecurityManager() {
@Override
public void checkExit(int status) {
super.checkExit(status);
//custom exception extends SecurityException
throw new SystemExitCalledException();
}
});
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
//never reaches here somehow...
//maybe some3rdPartyStaticMethod sets this, too?
}
});
try {
//this method spawns threads and some call System.exit().
some3rdPartyStaticMethod.invoke(null, new Object[]{args});
} catch (SystemExitCalledException e) {
//it never reaches here because
//SystemExitCalledException is thrown on different thread??
//
}
Есть ли способ предотвратить System.exit() вызов порождал поток some3rdPartyStaticMethod от остановки виртуальной машины Java?
Возможно, вы можете использовать «SecurityManager» для замены вызова на «Shutdown.exit» на «SecurityException». –