1

私のアプリケーションは、ユーザーのためにコンテンツを出力する必要があります。すべてのクラスで System.out.println を使用してきましたが、このプログラムはコマンド ラインで実行することを意図していないため、これはあまり適していません。

私は単純に JPanel を拡張するクラスを作成し、すべてのコンテンツをテキストエリアに追加することを考えていました。これは良い動きではないことを読んでいて、テキストを出力するすべてのクラスに JPanel クラスを渡す必要があるという問題が発生します。

System.out.println に代わる優れた方法はありますか? そうでない場合は、どのように進めることをお勧めしますか? Java Logging の提案がありますが、ファイルに出力したくありません。

4

6 に答える 6

3

ほとんどのクラスでユーザー インタラクションを制限する必要があり、実際、UI コードは独自のクラス セットで分離する必要があります。コンソール アプリケーション、Swing アプリケーション、SWT アプリケーション、またはその他の UI ライブラリ タイプのアプリケーションで適切に機能するように、モデル (非 UI) コードを記述するように努める必要があります。このようにして、あなたのコードは SOP または GUI で適切に動作することができます。プロのコーダーによって作成された Java クラスの 90% 以上には、UI コードが含まれていません。

また、ロギングとユーザー インタラクション コードは、2 つの完全に相反する概念であることに注意してください。私はロギングを、ユーザーではなく、開発者やサポーターとコミュニケーションをとる手段と考えています。

于 2013-05-19T00:34:53.940 に答える
2

@Hovercraft のコメントに同意します。JPanel を渡さないstaticでください。他のすべてのオブジェクトが出力する必要があるときに呼び出すメソッドを UI クラスに用意してください。そのメソッドは、書式設定と追加などを処理します。

printlnさらに、Javaに関しては、実際に代替手段はありません。これは、println が stdout にのみ出力し、GUI アプリケーションでは、ユーザーがコマンド ラインからプログラムを実行しない限り非表示になるためです。

于 2013-05-19T00:35:09.050 に答える
1

必要なのは、Log4j のような構成可能なロギング フレームワークです。カスタム ログ アペンダーを作成することで、ファイルだけでなく、必要な場所にログ出力を表示することができます

于 2013-05-19T00:33:32.740 に答える
1

その理由は、stdout にメッセージを送信することは通常、運用環境では不適切だからです。ライブラリをコーディングしている場合、ライブラリは stdout に出力するのではなく、呼び出し元に情報を返す必要があります。GUI アプリをコーディングしている場合、stdout がたまたま指している場所 (どこにもない可能性があります) ではなく、ユーザーに情報を提示する必要があります。サーバー (またはサーバー側のコンテナーで実行されるもの) をコーディングしている場合は、フレームワークが提供するログ機能を使用する必要があります。などなど。

ロガーは、ログに記録されたメッセージのさまざまなレベルの重要性を定義する機能と、出力にさまざまなシンク (コンソール、ファイルなど) を使用する機能を提供します。

また、ロガーを使用する場合、特定のタイプのメッセージのみを有効または無効にするのは簡単です。たとえば、本番環境ですべてのデバッグ メッセージを表示したくない場合などです。

ロガーを使用しても単体テストで大きな利点が得られるとは思いませんが、とにかく使用したいと思います。単体テストでは、アサートは通常、私の主な関心事です。

ところで、 Commons LoggingSLF4Jなどをログ フレームワーク ファサードとして使用することを検討する必要があります。コードを特定のロギング フレームワークに結び付けるのは不適切なスタイルです。Common Logging と SLF4J を使用すると、必要に応じてロギング フレームワークを簡単に切り替えることができます。

于 2013-05-19T00:40:53.433 に答える
-3

System.out.println に代わる優れた方法はありますか?

戻る

于 2013-05-19T17:16:28.717 に答える