public class Argon {
public static void main(String[] args) {
Basil basil = new Basil();
Scanner in = new Scanner(System.in);
do {
try {
System.out.println("Please enter a number!");
String num1 = in.nextLine();
System.out.println("Please enter another number!");
String num2 = in.nextLine();
basil.numberCruncher(num1, num2);
System.out.println(basil.getSum());
break;
} catch (NumberException e) {
e.printStackTrace();
}
} while (true);
}
}
上面的代码可以尝试一段代码,并捕获发生的任何错误。我故意提供了一个错误,并且代码显示了以下内容。
Please enter a number!
nop
Please enter another number!
w
NumberException: Your Program Went Bananas.
Please enter a number!
at Basil.numberCruncher(Basil.java:23)
at Argon.main(Argon.java:15)
堆栈跟踪尚未完全打印,但是try块仍然开始执行。
为什么会发生这种情况,我该怎么解决?
最佳答案
默认情况下,Throwable#printStackTrace
打印到System.err
。您正在打印到System.out
。由于只有一个控制台,因此它会接收这两个流。
无论您控制哪个控制台,您都必须执行自己的缓冲和刷新操作,这些操作不会同步每个流的写入,即使程序顺序执行,也可能导致混合输出。