4

起動時にこれをコンソールに約12回表示するJavaアプリケーションをデバッグしています:

java.awt.Dimension[width=140,height=122]

私はそれを黙らせたいのですが、それがどこから来ているのかわかりません。アプリケーションは巨大で、私はそれについてあまり知りません。実行中にコードをステップ実行することで、おそらく犯人を見つけることができますが、もっと賢い方法があるのではないかと思っています。

4

2 に答える 2

8

問題のある print ステートメント (getPreferredSize() メソッド内) を見つけましたが、より一般的な解決策も見つけました。System.outusing を置き換える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!");
        }
    }
});
于 2013-11-10T09:38:23.843 に答える
2

Dimensionクラスのオブジェクトをコードのどこかに出力している必要があります。出力として表示されるもの:

java.awt.Dimension[width=140,height=122]

クラスtoStringのメソッドが呼び出されるときに来ます。fromクラスDimensionのソースは次のとおりです。toStringDimension

   public String toString() {
    return getClass().getName() + "[width=" + width + ",height=" + height + "]";
    }

Dimensionそのため、コード、特に でクラス オブジェクトを探してくださいSystem.out.println

于 2013-11-09T17:12:35.270 に答える