我正在开发一个多线程Java程序,在整个代码中使用不同的断言,并使用ea
标志运行我的程序。
当任何断言失败时,我可以立即停止并退出程序吗?
答案 0 :(得分:5)
try {
code that may generate AssertionError
} catch (AssertionError e) {
System.exit(0);//logging or any action
}
也启用断言。
但必须小心。
答案 1 :(得分:4)
断言将停止任何线程抛出断言。虽然我认为杀死那个线程就足够了,你不会想杀死整个程序。无论如何,要实际杀死整个程序,只需用
包装你的runnablestry {
} catch (AssertionError e) {
System.exit(1);
}
会在引发断言时终止程序。
所以你可以运行一个“CrashOnAssertionError”来包装所有的runnables:
public class CrashOnAssertionError implements Runnable {
private final Runnable mActualRunnable;
public CrashOnAssertionError(Runnable pActualRunnable) {
mActualRunnable = pActualRunnable;
}
public void run() {
try {
mActualRunnable.run();
} catch (AssertionError) {
System.exit(1);
}
}
}
然后你可以这样做:
Runnable r = new CrashOnAssertionError(
new Runnable() {
public void run() {
// do stuff
}
});
new Thread(r).start();
答案 2 :(得分:1)
当启用断言时,它们会在失败时抛出java.lang.AssertionError
。只要你不试图捕获这个,当断言失败时,抛出异常的线程就会停止。
如果您还有其他任何行为,可以catch (AssertionError)
在catch
语句中执行任何操作。例如,请致电System.exit(1)
。
如果您希望AssertionError
包含错误消息,则需要使用assert Expression1 : Expression2;
形式的断言。有关详细信息,请read this。