我正在调试一个Java应用程序,它有助于在启动期间将其打印到控制台上十几次:
java.awt.Dimension[width=140,height=122]
我想关闭它,但我不知道它来自哪里。应用程序非常庞大,我对此并不了解。我可以通过逐步运行代码找到罪魁祸首,但我想知道有更聪明的方法吗?
答案 0 :(得分:6)
我发现了违规的print语句(在getPreferredSize()方法中),但我也发现了一个更通用的解决方案。通过使用System.setOut
替换System.out
,理论上可以在发生时捕获打印语句。
这不完全可靠,因为:(1)类PrintStream有许多不同数据类型的打印方法,并且没有一个好的单一方法可以覆盖。执行实际输出的方法是私有的。 (2)如果需要,代码可以将消息拆分为单个字符,因此没有简单的方法来进行String.contains()
检查。
尽管如此,作为一个快速的调试黑客,这似乎很好地工作:
System.setOut(new java.io.PrintStream(
new java.io.FileOutputStream(java.io.FileDescriptor.out)) {
@Override
public void print(String s) {
super.print(s);
if (s.contains("java.awt.Dimension")) {
throw new RuntimeException("Found you!");
}
}
});
答案 1 :(得分:2)
您必须在代码中的某处打印Dimension
类的对象。你看到的输出:
java.awt.Dimension[width=140,height=122]
在调用toString
类的Dimension
方法时出现。以下是toString
类Dimension
的来源:
public String toString() {
return getClass().getName() + "[width=" + width + ",height=" + height + "]";
}
请在代码中查找Dimension
类对象,尤其是System.out.println
。