1

以前の質問 ( Detecting When A Java Application Closes ) に続いて、シャットダウンする前にアプリケーションのリソースをクリーンアップしようとしています。クリーンアップ操作を完全に実行する次のコードを実装しました。

//Intercept when the application closes
            Runtime.getRuntime().addShutdownHook(new Thread()
            {
                @Override
                public void run()
                {
                    //Reclaim resources from MIDI usage
                    if(_midiInstance.CleanUp())
                    {
                        Logger.Add("Closed resources successfully on ShutDown");
                    }
                    else
                    {
                        Logger.Add("Failed to close all resources on ShutDown");
                    }
                    System.exit(0);
                }
            });

System.exit(0); 呼び出しが理解されて処理されると、アプリケーションは引き続き実行されますが、目に見える GUI はありません。System.exit(0) 呼び出しをスレッドのすぐ外側に配置することを考えましたが、それは範囲外であり、実行中の他のスレッドやストリームはありません。

すべてが確実に終了するように ShutDown イベントにフックするときに実行する必要がある追加の手順はありますか?

お時間をいただきありがとうございます。

4

2 に答える 2

3

他の質問を読んだ後、おそらくウィンドウでdispose()を呼び出していないようです。本当なら、それはあなたの問題の原因を説明するでしょう.

于 2011-04-20T19:01:41.397 に答える
1

ウィンドウの閉じるボタンをオーバーライドする必要があります。

            //overriding the windowClosing() method will allow the user to click the close button
    addWindowListener(
            new WindowAdapter()
    {
        public void windowClosing(WindowEvent e)
        {
            System.exit(0);
        }
    });

これを行うことにより、プログラムは非表示になるだけでなく終了します。

于 2011-04-20T19:17:27.550 に答える