gpt4 book ai didi

exception - printStackTrace() 的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 21:15:01 26 4
gpt4 key购买 nike

printStackTrace() 的行为就好像它在等待输入后在自己的线程中运行一样。这是我的代码:

try {
new Scanner(System.in).nextLine();
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
System.out.print("STUFF");

我有时会得到预期的输出(最后有 STUFF),但有时我会得到这个:

blabla // the scanner input
java.lang.ExceptionSTUFF
at Test.main(Test.java:7)

有时是这样的:

blabla
java.lang.Exception
STUFF at Test.main(Test.java:7)

用 System.in.read() 替换扫描仪会产生相同的结果。完全删除这条线会产生预期的结果。在我注意到这个问题的实际程序中,堆栈跟踪要长得多,并且 STUFF 输出总是按预期出现,或者如上面的第二个输出所示 - 在第二行的开头。

造成这种情况的原因是什么?如何解决?

最佳答案

printStackTrace,根据文档,prints to the standard error stream :

public void printStackTrace() – Prints this throwable and its backtrace to the standard error stream.

...这是System.err。然后您将写入System.out。这两个是不同的流,因此会在不同的时间刷新到实际输出。保留代码不变,它相当于 this question 中概述的问题。 .

要解决此问题,您可以手动刷新输出流或将异常打印到 System.out 而不是 System.err。您可以使用 variant of printStackTrace that accepts a PrintStream以标准输出作为参数:e.printStackTrace(System.out);

关于exception - printStackTrace() 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31267907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com