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。由于只有一个控制台,因此它会接收这两个流。

无论您控制哪个控制台,您都必须执行自己的缓冲和刷新操作,这些操作不会同步每个流的写入,即使程序顺序执行,也可能导致混合输出。

08-07 10:16