Speichern-Dialog beim Schliessen eines Applets

UseTheSource

Grünschnabel
Hallo allerseits

Ich arbeite an einem Applet, mit dem man die Konfiguration mehrerer Geräte bearbeiten kann. Das speichern sollte im Normalfall der Benutzer übernehmen, wurden aber Geräte verändert und das Applet wird geschlossen, wird nachgefragt, ob und welche geänderten Geräte-Konfigs gespeichert werden sollen. Das funktioniert sowei auch, was allerdings danach beim Schliessen des Browsers passiert ist nicht mehr so richtig erwünscht.
Beim Firefox ist es noch eher hinnehmbar, dort gibt es ein Problem falls das Applet im einzigen Tab läuft und somit der ganze Browser geschlossen wird, denn dann wird der Dialog kurz (für ein paar Sekunden) angezeigt, danach wird es allerdings geschlossen (ich vermute mal die VM wird beendet).
Schlimmer ist es beim IE, dort hat man zwar genügend Zeit, dafür hängt sich aber der IE danach auf und muss abgeschossen werden (auch hier vermute ich mal dass es was mit der VM zu tun hat). Wenn ich das richtig sehe wird also beim Firefox zu viel, beim IE zu wenig beendet :-(

Mein erster Lösungs-Versuch (im IE ist mir das Problem zuerst aufgefallen) war ein ein "System.exit(0);", dabei werden aber leider sämtliche Browser-Fenster beendet, was ja auch wieder nicht das Ziel der Sache ist.

Ich hoffe, jemand kann mir bei diesem Problem weiterhelfen. Schon mal herzlichen Dank im Voraus!

MfG UseTheSource


PS: mein stop()-Methode...
Code:
//...

  public void stop() {
    //...
    if (changed_phones.length > 0) {
      final EscDialog dlg_exit = new EscDialog("Mit geänderten Daten schliessen", 400, 300, true, true);
      dlg_exit.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
      Container cPn_dlg_exit = dlg_exit.getContentPane();
      JPanel pnl_dlg_exit = new JPanel(new BorderLayout(0, 10));
      pnl_dlg_exit.setBorder(BorderFactory.createEmptyBorder(20, 20, 10, 20));

      JLabel lbl_dlg_exit_title = new JLabel("Folgende PARITY Phones wurden verändert, Änderungen speichern?");
      JPanel pnl_dlg_exit_cbs = new JPanel();
      final JCheckBox[] cb_dlg_exit = new JCheckBox[changed_phones.length];
      JScrollPane scrPn_dlg_exit_cbs = new JScrollPane(pnl_dlg_exit_cbs);
      JPanel pnl_dlg_exit_btns = new JPanel();
      final JButton btn_dlg_exit_save = new JButton("Änderungen Speichern");
      final JButton btn_dlg_exit_discard = new JButton("Änderungen Verwerfen");
      final VerticalFlowLayout vertFlowLayout_dlg_exit_cbs = new VerticalFlowLayout(VerticalFlowLayout.TOP, 15, 0, true, false);

      pnl_dlg_exit.add(lbl_dlg_exit_title, BorderLayout.NORTH);
      pnl_dlg_exit_cbs.setLayout(vertFlowLayout_dlg_exit_cbs);
      pnl_dlg_exit_cbs.setBackground(Color.white);
      pnl_dlg_exit_cbs.add(new JLabel(" "));
      for (int i = 0; i < changed_phones.length; i++) {
        cb_dlg_exit[i] = new JCheckBox(" " + phones.getPhone(changed_phones[i]).getName(), true);
        cb_dlg_exit[i].setBackground(Color.white);
        pnl_dlg_exit_cbs.add(cb_dlg_exit[i]);
      }
      pnl_dlg_exit_cbs.add(new JLabel(" "));
      pnl_dlg_exit.add(scrPn_dlg_exit_cbs, BorderLayout.CENTER);

      //Hier wirds interessant...

      btn_dlg_exit_save.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          for (int i = 0; i < changed_phones.length; i++)
            if (cb_dlg_exit[i].isSelected())
              phones.getPhone(changed_phones[i]).saveChanges(sql);
          dlg_exit.dispose();
          //destroy();
          //System.exit(0);
        }
      });
      btn_dlg_exit_discard.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          dlg_exit.dispose();
          //destroy();
          //System.exit(0);
        }
      });

      //...hier nicht mehr ganz so...

      pnl_dlg_exit_btns.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
      pnl_dlg_exit_btns.add(btn_dlg_exit_save);
      pnl_dlg_exit_btns.add(btn_dlg_exit_discard);
      pnl_dlg_exit.add(pnl_dlg_exit_btns, BorderLayout.SOUTH);
      cPn_dlg_exit.add(pnl_dlg_exit);
      dlg_exit.show();
    }

    //...und hier möglicherweise nochmal

    //destroy();
    //System.exit(0);
  }

//...
 
Kann mir bei diesem Problem wirklich niemand helfen? :(
Ich würde mich über einen Lösung-Ansatz wirklich freuen, denn mir ist immer noch keiner eingefallen...

MfG UseTheSource
 
Zurück