3

System.outとSystem.errにいくつかの診断メッセージを書き込むJavaGUIベースのアプリケーションがあります。これらのメッセージは、Windowsで実行するとどこに出力されますか?(たとえば、Mac OS Xでは、システムコンソールログに出力されます。)

編集

Javaアプリケーションは.exeとしてパッケージ化されているため、(現時点では)を使用して起動することはできませんjava。(個々の.JARファイルをWindowsテストマシンにコピーできると思います。)

また、これは私が継承したアプリであり、以前はロギングフレームワークを使用していませんでした。1つを使用するように変更したいのですが、問題を診断するためにログ出力をすばやく取得したいと思っていました。

4

6 に答える 6

6

setout( )setErr( )を使用して、アプリケーション内の System.out と System.err が指す場所を実際に変更できます。

たとえば、ファイルにダンプしたい場合は、次のことができます

System.setOut(new PrintStream("output.txt"));
System.setErr(new PrintStream("err.txt"));

一度それを行うだけで、準備完了ですmain(String[] args)

于 2010-01-18T03:45:30.163 に答える
3

私の知る限り、を使用してJavaアプリケーションを起動するjava.exeと、それらはコンソールに書き込まれます。標準の in/out/err は GUI アプリケーションにリダイレクトされないため、使用して開始するとjavaw.exe、どこにも行きません。(手動でサブプロセスを作成しjavaw.exeて出力をリダイレクトすることもできますが、それは範囲外だと思います)

代わりに何らかのロギング フレームワークを使用し、メッセージをログ ファイルに書き込むことをお勧めします。log4jまたはjava.util.logging良いスタートになるでしょう...

于 2010-01-18T00:17:32.707 に答える
2

アプリケーションの起動方法に大きく依存します。たとえば、Windows のコマンドライン プロンプト (たとえば などjava -jar myApp.jar) から GUI を起動する場合、ご想像のとおり、System.out と System.err の両方がコンソールに表示されます。Windows シェル自体を介して起動している場合 (たとえば、実行可能な JAR をダブルクリック)、私の知る限り、これらのエラー ストリームは失われます。アプリをサービスとして実行するように設定すると (状況によってはありそうもないかもしれませんが)、出力ストリームも失われます。

標準の入力および出力ストリームの使用は、これらが通信用の共通チャネルであるシェル スクリプト タイプの環境でプログラムが呼び出されることを想定していない限り、通常は良い考えではありません。お気づきのように、これらは通常、GUI 環境では適切に定義されていません。プログラムの実行中にテキスト情報をキャプチャする必要がある場合は、「実際の」ロギング フレームワーク (log4j やjava.util.loggingパッケージなど) を使用してメッセージをログにキャプチャすることを検討してください。

于 2010-01-18T00:18:25.070 に答える
2

.jar ファイルをダブルクリックして javaw で起動した GUI ベースのアプリケーションは、System.out と System.err を出力しません。

デフォルトの初期化のために java.util.logging.config.file をロードします

「javaw」は、System.out および System.err へのすべての出力を飲み込みます。代わりに "java" を試してください ("w" なし)。

于 2010-01-18T00:19:01.020 に答える
1

System.errコマンドラインからクラスを実行すると、コンソールにメッセージが出力されます。そうしないと、これらのメッセージは表示されません。

于 2010-01-18T00:16:46.653 に答える