有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

打印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) 个答案

  1. # 1 楼答案

    默认情况下,Throwable#printStackTrace打印到System.err。您正在打印到System.out。因为只有一个控制台,所以它同时接收这两个流

    无论您看到的控制台的控件是什么,都必须执行自己的缓冲和刷新,这不会同步每个流的写入,而且即使程序按顺序执行,也可能导致混合输出