0

私は 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 の両方) も試しました。毎回同じ結果が得られます。

ここでの問題は何ですか。どうすれば解決できますか?

4

1 に答える 1

3
于 2013-08-15T09:42:26.107 に答える