如果断言失败,则退出java程序

时间:2010-08-09 14:32:35

标签: java assert

我正在开发一个多线程Java程序,在整个代码中使用不同的断言,并使用ea标志运行我的程序。

当任何断言失败时,我可以立即停止并退出程序吗?

3 个答案:

答案 0 :(得分:5)

try {
    code that may generate AssertionError
} catch (AssertionError e) {
       System.exit(0);//logging or any action
}  

也启用断言。
但必须小心。

答案 1 :(得分:4)

假设未捕获AssertionError,

断言将停止任何线程抛出断言。虽然我认为杀死那个线程就足够了,你不会想杀死整个程序。无论如何,要实际杀死整个程序,只需用

包装你的runnables
try { 
} 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