打印堆栈跟踪干扰打印行
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,看看问题是否解决。
抱歉,如果这是一个新问题。
当使用 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,看看问题是否解决。