抱歉,如果这是一个菜鸟问题。
当使用 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/