4

Java の System.out.println が出力を生成できないシナリオをいくつか教えてください。メソッド内でそれを呼び出していますが、メソッドが呼び出されたときにprintlnを取得する場合と取得しない場合があります。

更新: println の後に System.out.flush() も使用しています。

更新: デバッグのヘルプをありがとう。ダイアログを開くためのブロッキング呼び出しにより、出力が適切な順序から大幅にずれて表示されることが判明しました。ダイアログが閉じたときにメッセージを出力しようとしていたメソッドが呼び出されたと思いましたが、メソッド自体がダイアログを呼び出していたので、閉じた後、テストを探し始めた場所であるプリントアウトをすでに過ぎていました。問題が最初に尋ねられたものではなかったため、誰かがこの質問を削除できる場合は、それをいただければ幸いです。

4

6 に答える 6

5

System.out.println一部のプラットフォームでは、バッファリングされた出力を使用します。コードの実行内容によっては、プログラムが終了する前にバッファーがフラッシュされない可能性があります。System.out.flush()の後に入れてみてprintln、それが役立つかどうかを確認してください。

編集:

メソッドが呼び出されたときにprintlnを取得する場合と取得しない場合があります

メソッドが呼び出されたが、println が出力を生成しないことをどのように確認していますか? メソッドがprintlnに到達する前に例外をスローしている可能性はありますか?

もちろん、実際のコードを確認することは非常に役立ちます。

于 2010-07-21T17:30:19.860 に答える
4

私はこれまでにこのシナリオを見たことがありません。理論的には、出力が期待する場所にない場合にのみ「失敗」します。つまり、出力ターゲットは を使用して変更できますSystem#setOut()

于 2010-07-21T17:29:49.933 に答える
2

出力をどこでチェックしていますか?他の場所にリダイレクトされている可能性があるSystem.outため、間違った場所を探している可能性があります。

于 2010-07-21T17:31:14.867 に答える
1

@BalusCの提案に従って答えてください--

デバッグの助けをありがとう。ダイアログを開くためのブロッキング呼び出しにより、出力が適切な順序から大幅にずれて表示されることが判明しました。ダイアログが閉じたときにメッセージを出力しようとしていたメソッドが呼び出されたと思いましたが、メソッド自体がダイアログを呼び出していたので、閉じた後、テストを探し始めた場所であるプリントアウトがすでに渡されていました。問題が最初に尋ねられたものではなかったため、誰かがこの質問を削除できる場合は、それをいただければ幸いです。

于 2010-07-22T15:39:28.080 に答える
0

System.out.println はバッファリングされた出力です。バッファをフラッシュしないと、プログラムの終了まで「待機」しているように見える場合があります。場合によっては、プログラムがバッファーをフラッシュする前に停止することがあります。System.out.flush() は出力を強制的にフラッシュします。

于 2010-07-21T17:31:52.583 に答える
0

ファイルハンドルが変更された可能性があります。つまり、stdoutのファイル記述子はもはや ではありません1。ファイル記述子に出力される可能性のあるテキストをキャッチしたくないロギング ユーティリティでこれが行われるのを見たことがあります。そのため、ストリームを開いているファイルのファイル ハンドルにリダイレクトするだけです。

Python での例を次に示します。

import sys

h = open(r"C:\foo.txt","a+")

sys.stdout = h
sys.stdout.write("hey fellas")

h.close()

コマンドラインでこれを実行すると、期待どおりに「ちょっとフェラ」が出力されません。代わりに、ファイル C:\foo.txt にリダイレクトされます。

于 2010-07-21T17:38:34.700 に答える