java - 打印堆栈跟踪干扰打印行

标签 java exception stack trace

抱歉,如果这是一个菜鸟问题。

当使用 System.out.println() 然后打印堆栈跟踪时,两者似乎重叠并相互干扰。

这段代码:

System.out.println("Multiple definitions for " + analyzer.name + ":");
for (String name : resultNames) {
    System.out.println('\t' + name);
}
throw new RuntimeException("Multiple class definitions found matching " + analyzer.name);

产生此输出

Exception in thread "main" java.lang.RuntimeException: Multiple class definitions found matching RenderableNode
Multiple definitions for RenderableNode:
    at org.lime.apollo.updater.UpdaterApplication.runAnalyzer(UpdaterApplication.java:63)
    Analyzer1
    Analyzer2
    at org.lime.apollo.updater.UpdaterApplication.runAnalyzers(UpdaterApplication.java:70)
    Analyzer3
    at org.lime.apollo.updater.UpdaterApplication.main(UpdaterApplication.java:87)

Analyzer1、Analyzer2 等的预期行为是在任何堆栈跟踪之前打印。但相反,这两者似乎是互相打印的,这使得结果难以阅读。

我做错了什么?

编辑: Kon 在下面的回答解释了这一点,但我不知道如何标记为已解决。

最佳答案

System.out.println 被缓冲,而错误输出则不被缓冲。这意味着在您看到 System.out.println 的结果之前偶尔会有延迟。异常是通过 System.err.println 报告的,它没有缓冲,因此会立即打印。

尝试将 System.out.println 语句切换为 System.err.println,然后查看问题是否解决。

关于java - 打印堆栈跟踪干扰打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30269242/

相关文章:

java - Spring JPA 多对多 : remove entity, 删除连接表中的条目,但不删除另一侧

java - onResponse 方法中的 Volatile 变量没有改变

java - JButton 在我滚动之前不可见

javascript - 捕获 Javascript 代码中的空格

c++ - pop如何使用链表在堆栈中工作?

c - 为字符缓冲区分配可变长度数组

java - Spring 在 security-context.xml 中使用 applicationContext 中的 bean

java - 写入文件时出现 NoSuchElementException

java - 未捕获的 java.nio.channels.UnresolvedAddressException

c++ - C++ 隐含了这个,以及它是如何被压入堆栈的