簡単なサーバークライアントプログラムをセットアップしました。ユーザーが接続のリッスンを開始すると、「接続をリッスンしています」というメッセージと [キャンセル] ボタンが表示されたダイアログが表示されます。キャンセルを押すと、サーバー ソケットが閉じられます。それは大丈夫です。
私が望むのは、接続が確立されたときに「Listening...」ダイアログを非表示にすることです。
現在、ListenDialog は実行可能です。accept()
そこに入れようとしたか、while(true), if socket != null, dispose();...
何も機能しませんでした。ダイアログはモーダルとして設定されます。そうしないと、accept()
ブロックとダイアログ GUI (つまり、キャンセル ボタン) が描画されないためです。別のスレッドにある必要があるように見えても、run()
メソッドでさえブロックが停止するまで実行されません。accept()
したがって、dispose()
ダイアログのrun()
メソッドを挿入してダイアログを非モーダルにするだけで、必要な終了機能を取得できます...しかし、GUIをペイントすることはないため、キャンセルボタンは使用できません。ダイアログをモーダルにすることで GUI とキャンセル ボタンを取得できますがaccept()
、メソッドのブロックが停止した後でも、run()
何もしないようです (つまり、ダイアログは手動で閉じるまでそこに留まり、run()
コードも実行されません)。
私が見逃している明らかなものがあることを教えてください!
ListenDialog listener = new ListenDialog();
Thread listenThread = new Thread(listener);
listenThread.start();
try {
socket = server.accept();
listener.dispose();
} catch(IOException e1) {
addMessage("Accept Failed: " + e1.getMessage());
}