Avatar billede knudmuhko Nybegynder
21. december 2008 - 22:53 Der er 7 kommentarer og
1 løsning

Swing i shutdownhook

Jeg har lavet et lille program der registrerer forskellige ting, som der bliver gemt i en fil. Denne fil bliver kun opdateret på brugerens ordre, altså alt redigering i informationer ligger i memory indtil brugeren trykker på gem knappen.
Den klasse der gemmer i filen registerer om brugeren har indtastet nogle informationer uden at trykke gem.
Alt dette har jeg fået til at virke, men jeg har prøvet at lege lidt med at tilføje en shutdownhook til Runtime.getRuntime(). Dette virker også indtil jeg prøver at tilføje noget JOptionPane i denne. Kan man ikke på dette tidspunkt spørge brugeren om han vil gemme inden der lukkes? Ved godt man kan bruge en seperat knap hvor man kan putte dette i eventhandleren, men ville helst have det sådan at man kan bruge "krydset i hjørnet" til at lukke:)

kode der virker

public class minKlasse implements Runnable{

  public run(){
    try {
      andenKlasse.gem();
    } catch (MinException e){
    }
  }
}

kode der ikke virker:
public class minKlasse implements Runnable{

  public run(){
    try {
      int svar = JOptionPane.showConfirmDialog(null, "Gem?");
      if (answer == JOptionPane.YES_OPTION){
        andenKlasse.gem();
      }
    } catch (MinException e){
    }
  }
}
Kan være der er stavefejl. Det er ikke disse der er problemet.
Der kan være stavefejl da jeg ikke lige har koden på mig i skrivende stund.

På forhånd mange tak:)
Avatar billede arne_v Ekspert
21. december 2008 - 23:41 #1
Dokumentation siger:

Shutdown hooks run at a delicate time in the life cycle of a virtual machine and should therefore be coded defensively. They should, in particular, be written to be thread-safe and to avoid deadlocks insofar as possible. They should also not rely blindly upon services that may have registered their own shutdown hooks and therefore may themselves in the process of shutting down. Attempts to use other thread-based services such as the AWT event-dispatch thread, for example, may lead to deadlocks.

jeg ville ikke være vildt overrasket, hvis der også var problemer med Swing !
Avatar billede arne_v Ekspert
21. december 2008 - 23:43 #2
Jeg tror at du skal satse på en WindowListener - den bliver også kaldt hvis man klikker
på krydset.
Avatar billede knudmuhko Nybegynder
22. december 2008 - 00:24 #3
lyder som en god ide. vil prøve det når jeg får tid i morgen
Avatar billede arne_v Ekspert
22. december 2008 - 01:08 #4
Til inspiration:

import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class ExitHandling extends JFrame implements WindowListener {
    public ExitHandling() {
        setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        setTitle("Exit handling demo");
        setSize(300, 300);
        addWindowListener(this);
    }
    @Override
    public void windowActivated(WindowEvent e) {
    }
    @Override
    public void windowClosed(WindowEvent e) {
    }
    @Override
    public void windowClosing(WindowEvent e) {
        switch(JOptionPane.showConfirmDialog(null, "Save?")) {
            case JOptionPane.YES_OPTION:
                // save file
                dispose();
                break;
            case JOptionPane.NO_OPTION:
                dispose();
                break;
            case JOptionPane.CANCEL_OPTION:
                // nothing
                break;
        }
    }
    @Override
    public void windowDeactivated(WindowEvent e) {
    }
    @Override
    public void windowDeiconified(WindowEvent e) {
    }
    @Override
    public void windowIconified(WindowEvent e) {
    }
    @Override
    public void windowOpened(WindowEvent e) {
    }
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame f = new ExitHandling();
                f.setVisible(true);
            }
        });
    }
}
Avatar billede knudmuhko Nybegynder
22. december 2008 - 13:44 #5
Det er sku i orden
Hvis du sender et svar så.
Avatar billede arne_v Ekspert
22. december 2008 - 14:51 #6
kommer her
Avatar billede knudmuhko Nybegynder
22. december 2008 - 16:24 #7
Tak for hjælpen
Avatar billede knudmuhko Nybegynder
22. december 2008 - 16:24 #8
tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester