21

アプリケーションを作成しましたが、終了する前にいくつかのオプションを保存する必要があります (ウィンドウの寸法など、ファイルに書き込まれます)。

メインフレームはこれを設定しています:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

興味のあるオプションを保存するにはどうすればよいですか? (コースを終了する前に)

ありがとう!

4

4 に答える 4

36

アプリケーションのシャットダウン時に何かをしたい場合は、次のコードを使用してシャットダウンをフックできます。

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

        public void run() {
            // Do what you want when the application is stopping
        }
    }));

ただし、これにより、ウィンドウを閉じないようにすることはできません。実際に終了する前に何かを確認する必要がある場合は、windowClosingイベントをオーバーライドできます。

addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
        // Do what you want when the window is closing.
    }
});

シャットダウン フックを使用する最初の解決策には、ウィンドウ イベントに関連しないという利点があり、アプリケーションが別のイベントによって停止された場合でも実行されることに注意してください (もちろん、Java プロセスが残酷に強制終了された場合は除きます)。 )。

于 2010-03-02T07:46:04.553 に答える
7

以下が役立つかもしれません。

  1. まず、プロパティ ファイルを読み取る必要があります。ドキュメントを参照

    Properties properties = new Properties();
    try {
      properties.load(new FileInputStream("filename.properties"));
    } catch (IOException e) {
      System.err.println("Ooops!");
    }
    
  2. 次に、ウィンドウにイベントハンドラーを追加します。これにより、データがプロパティファイルに保存されます。保存する必要があるのは、プロパティインスタンスに入れ、終了時に保存するだけです

     addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        try {
         properties.store(new FileOutputStream("filename.properties"), null);
        } catch (IOException e) {
        }
      }
    });
    

それがすべてです、私があなたを正しく理解していれば)

于 2010-03-02T07:45:05.087 に答える
2

WindowListenerを登録して、windowClose メソッドにオプションを保存できます。

そしてもちろん

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
于 2010-03-02T07:35:32.623 に答える
0

これがあなたの状況に当てはまるかどうかはわかりませんが、このスレッドをサーフィンしている他の人には当てはまるかもしれません. 私のアプリケーションには main() があり、最後に while (!shell.isDisposed) ループがあります。アプリケーションが実行されるとそのループが始まり、アプリが閉じられるとそのループは終了し、メイン メソッドのその後にあるものに落ちます。ここで、エディターが汚れていないかどうか、設定が変更されているかどうかをチェックして、それらを条件に処理します。ファイル close に添付された私のメソッドは、シェルを破棄して closeCurrent() メソッドを呼び出しますが、誰かが「x」ウィンドウの閉じるアイコンをクリックすると、ここに落ち、何かが汚れていないかどうかを再度確認し、必要に応じて保存します。

while (!shlCpbtool.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    // exit
    if(dirty){
        closeCurrent();
    }
于 2012-08-31T14:41:22.720 に答える