我调试Java应用程序在启动过程中有益打印此约了十几次控制台:查找打印呼叫源
java.awt.Dimension[width=140,height=122]
我要关闭它,但我不知道它的到来从。该应用程序是巨大的,我不太了解它。我可能会在运行代码时逐步找到罪魁祸首,但我想知道有没有更聪明的方法?
我调试Java应用程序在启动过程中有益打印此约了十几次控制台:查找打印呼叫源
java.awt.Dimension[width=140,height=122]
我要关闭它,但我不知道它的到来从。该应用程序是巨大的,我不太了解它。我可能会在运行代码时逐步找到罪魁祸首,但我想知道有没有更聪明的方法?
您必须在代码的某处打印Dimension
类的对象。你所看到的输出:
java.awt.Dimension[width=140,height=122]
来当Dimension
类的toString
方法将被调用。下面是从toString
类Dimension
来源:
public String toString() {
return getClass().getName() + "[width=" + width + ",height=" + height + "]";
}
因此,寻找Dimension
类对象在你的代码,尤其是在System.out.println
。
我发现我的违规打印语句(在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!");
}
}
});