打印printStackTrace方法时,java尝试块开始打印
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块仍将开始执行。 为什么会发生这种情况?我可以做些什么来修复它
# 1 楼答案
默认情况下,
Throwable#printStackTrace
打印到System.err
。您正在打印到System.out
。因为只有一个控制台,所以它同时接收这两个流无论您看到的控制台的控件是什么,都必须执行自己的缓冲和刷新,这不会同步每个流的写入,而且即使程序按顺序执行,也可能导致混合输出