2

インスタント メッセンジャー アプリケーションを作成しています。Swing JFrame のデフォルトの閉じるボタン (小さな「x」) にアクション イベントを追加する必要があります。
クライアントが X ボタンを押すと、サーバーにオフラインになることを伝える必要があり、そのアクションが発生した後にのみウィンドウを閉じる必要があります。デフォルト ボタンでアクション リスナーを取得する方法が見つからないようです。

4

5 に答える 5

6

これを見てください。アプリケーションを閉じる
誰かが閉じるボタンを押したら、独自の実装を与えることができます。

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frame.addWindowListener( new WindowAdapter()
 {
   public void windowClosing(WindowEvent e)
    {
      // Here you can give your own implementation according to you.
     }
  });
于 2012-09-26T11:51:45.607 に答える
5

Runtime.addShutdownHook() メソッドを調べます。http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang.Thread%29

于 2012-09-26T11:49:29.677 に答える
4

JFrame にWindowListenerを追加し、windowClosingイベントを使用するだけです。

于 2012-09-26T11:48:21.383 に答える
3
JFrame f = new JFrame("Blah");
f.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        //do whatever you want before the window closes.
    }
});
f.setVisible(true);

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);サーバー通信が中断される可能性があるため、行わないでください。代わりに、System.exit(0)サーバーとの通信が完了したら、手動で言ってください。

于 2012-09-26T11:49:17.177 に答える
3

which ハンドルまたはaddWindowListenerで呼び出したいようですね。関心のあるメソッドをオーバーライドできるように、のサブクラスを作成することもできます。WindowListenerwindowClosingwindowClosedWindowAdapter

サーバーとの通信は別のスレッドで行う必要があることを忘れないでください。ネットワーク トラフィックで UI スレッドをブロックしないでください。ただし、アプリケーション全体が閉じている場合は、次の点にも注意してください。

  • とにかく、サーバーへの接続はすべて閉じます
  • バックグラウンドスレッドはすべて終了します
于 2012-09-26T11:48:36.807 に答える