打印堆栈跟踪干扰打印行

Print Stack Trace intefering with Print Line

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

当使用 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,看看问题是否解决。