私は Java を学んでいて、単純なクライアント サーバー アプリケーションを作成しようとしました。私のサーバーにはGUIがあり、サーバーを起動するボタンがあります。クリックすると、別のスレッドが開始されます。接続を処理し、クライアントを処理するため、メイン サーバー スレッドと呼んでいます。サーバーをシャットダウンするボタンもありますが、アプリケーション全体ではありません。ServerSocket を閉じてこのスレッドを中断し、サーバーを停止できるようにします。サーバーの実行が停止したことを通知するために、メッセージダイアログに inf finally ブロックをポップアップさせたいと思いました。以下は、サーバーの run メソッドのコードを少し簡略化して変更したものです。
public void run(){
try{
JOptionPane.showMessageDialog(null,"begining");
ss = new ServerSocket(TCP_PORT);
while(cont){
Socket sock = ss.accept();
exec.execute(new ServerThread(sock));
}catch(SocketException soex){
//JOptionPane.showMessageDialog(null,"SocketException");
}finally{
JOptionPane.showMessageDialog(null,"finally");
}
//JOptionPane.showMessageDialog(null,"after finally");
}
最初のメッセージ ダイアログは正しく表示されますが、例外が原因で他の 3 つのダイアログがポップアップすると、タイトルとウィンドウの境界線を含む灰色のメッセージ ダイアログしか表示されず、メッセージやボタンは表示されません。閉じることができません。アプリケーションを閉じることができません。そこに引っかかる。
私はUbuntuを使用しており、open-jdk javacバージョン「1.7.0_25」でコンパイルし、同じバージョンのJavaを使用して実行します。バージョン 1.6 と Oracle 1.7.0_25 (java と javac の両方) も試しました。毎回同じ結果が得られます。
ここでの問題は何ですか。どうすれば解決できますか?