3

プログラムの実行中に System.out/err を表示する Swing コンソール ウィンドウを作成するにはどうすればよいですか?

Eclipse から自己完結型の .jar に移行したい、多くの System.out ステータス更新を使用するアプリケーションがあります。System.out と System.err を表示する「コンソール ウィンドウ」を作成しようとしています。このリンクを出発点として使用しました。プログラムを開始する GUI アプリケーションでは問題なく動作しますが、アプリケーションの肉を実行するスレッドを開始するとすぐに、コンソール ウィンドウの更新が停止します。system.out をファイルにリダイレクトするテストを行ったところ、問題なく動作したため、何が間違っているのか混乱しています。基本的に、プログラムにはいくつかの主要な段階があります。

  1. プログラム開始。コンソールは正常に初期化され、スレッドを呼び出すまで機能します。
  2. GUI初期化。同じ。
  3. 初期ロジック実行。同じ。
  4. すべてが機能しなくなったように見えるスレッド: JTextArea が実際にロードされることはありません。ウィンドウは作成されますが、内容はその時点でウィンドウの背後にあったもののコピーに過ぎず、テキストは書き込まれません。
4

3 に答える 3

3

おそらく、イベント ディスパッチ スレッド以外のスレッドからテキスト領域を更新しようとしていると思います。これにより、通常、GUI が更新に失敗したり、ハングしたり、その他の悪いことが発生したりします。

あなたがしたいことは、SwingUtilities.invokeLater( link ) への呼び出しでディスプレイを更新することです。このようなもの:

SwingUtilities.invokeLater(new Runnable(){
  public void run(){
    myTextArea.append( "Some string" );
  }
});

System.out使用するのではなくSystem.err、実際のログ システムを使用することを検討しましたか? System.outこれは、オール オア ナッシングのアプローチであるため、通常、アプリケーションでメッセージのログ記録に使用されることはありません。中途半端なロギング ライブラリを使用すると、レベルを設定し、メッセージを受信する場所を微調整できます。個人的には Logback + SLF4J が好きですが、Java に組み込まれたロギング システムは単純なライブラリとしては十分です。

于 2013-06-19T15:51:43.377 に答える
2

Message Consoleの使用を試すことができます。

Message Consoles を使用していたときに PipedStreams を試してみたところ、使いにくいことがわかったので、別のアプローチを使用しました。

于 2013-06-19T15:54:17.660 に答える
1

一般に、System.Out のものを手動でログに記録することは非常に面倒になる可能性があるため、避け、log4jなどのログ ライブラリを実装する必要があります。この投稿には、ログ ライブラリに関する詳細情報があります。

于 2013-06-19T15:56:15.717 に答える