2

GUI を持つアプリケーションを作成する必要があります。私のアプリケーションはサーバーとして動作する必要があります。開始時に、すべての着信接続を受け入れ、出力を JTextArea に書き込む必要があります。私の問題は、接続を受け入れる方法でServerSocket ss = new ServerSocket(port_number)と メソッドを作成する必要がある場所です。ss.accept私は自分のGUIのメインコンストラクターで作成しようとしましたが、GUIが動かなくなっServerSocketたというI/Oリクエストです。解決策を解決するためのアイデアはありますか?

GUI のコンストラクターで次のように作成します。

SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});

connection()サーバーソケットを作成して呼び出しを受け入れるメソッドはどこですか

4

2 に答える 2

3

ネットワーク接続を待機/処理する別のスレッドを作成する必要があります。

新しい接続が入ってきたら、データを読み取り、EDT に渡して GUI を更新します。

これにより、GUI が応答します。

MVC パターンスレッドについて読む必要があります。Google で検索すると、勉強になる記事がたくさんあります

アップデート:

ここのコードは間違っています。

SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});

EDT スレッドからの接続を処理しています。
これを使用して GUI を更新し、ネットワーク I/O コードを呼び出す必要はありません。

于 2012-01-15T16:57:14.683 に答える
3

IO ロジックは、(少なくとも 1 つの) 別のバックグラウンド スレッドにある必要があります。これらのバックグラウンド スレッドのいずれかからテキスト領域に何かを出力する必要があるたびにSwingUtilities.invokeLater()、イベント ディスパッチ スレッドからのみ Swing コンポーネントにアクセスできるように、 を使用して実行する必要があります。

とはいえ、サーバーに GUI を用意するのはあまり良い考えではないと思います。単純にログ ファイルに書き込み、テキスト エディタを使用してサーバーが受信した内容を確認してみませんか。または、このサーバーのクライアントとしてサーバーの GUI を作成しますか?

于 2012-01-15T16:58:05.530 に答える