起動時にこれをコンソールに約12回表示するJavaアプリケーションをデバッグしています:
java.awt.Dimension[width=140,height=122]
私はそれを黙らせたいのですが、それがどこから来ているのかわかりません。アプリケーションは巨大で、私はそれについてあまり知りません。実行中にコードをステップ実行することで、おそらく犯人を見つけることができますが、もっと賢い方法があるのではないかと思っています。
問題のある print ステートメント (getPreferredSize() メソッド内) を見つけましたが、より一般的な解決策も見つけました。System.out
using を置き換えるSystem.setOut
ことで、理論的には、print ステートメントが発生したときにキャッチすることができます。
(1) クラスPrintStreamにはさまざまなデータ型の多くの印刷メソッドがあり、オーバーライドするのに適した単一のメソッドがないため、これは完全には信頼できません。実際の出力を行うメソッドは非公開です。String.contains()
(2) 必要に応じて、コードでメッセージを個々の文字に分割できるため、チェックを行う簡単な方法はありません。
それでも、簡単なデバッグ ハックとして、これはうまく機能するようです。
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!");
}
}
});
Dimension
クラスのオブジェクトをコードのどこかに出力している必要があります。出力として表示されるもの:
java.awt.Dimension[width=140,height=122]
クラスtoString
のメソッドが呼び出されるときに来ます。fromクラスDimension
のソースは次のとおりです。toString
Dimension
public String toString() {
return getClass().getName() + "[width=" + width + ",height=" + height + "]";
}
Dimension
そのため、コード、特に でクラス オブジェクトを探してくださいSystem.out.println
。