18

I was wondering if there is a way, by clicking on the "X", to let the program perform some code before closing the JFrame. The setDefaultCloseOperation() method takes only an integer.

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mKorbel
  • 109,107
  • 18
  • 130
  • 305
The JAVA Noob
  • 367
  • 4
  • 8
  • 21

3 Answers3

23
this.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    int i=JOptionPane.showConfirmDialog(null, "Seguro que quiere salir?");
                    if(i==0)
                        System.exit(0);//cierra aplicacion
                }
            });
MaynorSong
  • 570
  • 6
  • 14
16

@Jeffrey has a good answer, but you should consider what you're trying to do. If you really want to do something upon the closing of a frame, then a WindowListener is the way to go. However, if you're looking for a place to do some cleanup and graceful shutdown stuff, then you probably want a shutdown hook instead. Using a WindowListener, the code will only be triggered, as you said, by the user "clicking on the X". But what if the user starts the app in the foreground of a terminal and kills it with Ctrl+C? What if the user kills the process from the command line or from a task manager?

COD3BOY
  • 11,724
  • 1
  • 36
  • 55
Ryan Stewart
  • 120,981
  • 20
  • 172
  • 194
  • Wow, thank you for you reply. Im using this to save some data upon closing the frame. – The JAVA Noob May 06 '12 at 05:01
  • @Sanjay: I chose to link jdk6 because 1) in my experience, more people are still using 6 than 7, and 2) Runtime.addShutdownHook() didn't change a lick between 6 and 7. – Ryan Stewart May 06 '12 at 06:11
  • 2
    okay,point taken :) but I usually prefer to link to the latest docs whatsoever ! – COD3BOY May 06 '12 at 06:20
13

You might be interested in using a WindowListener. The WindowListener tutorial.

Jeffrey
  • 43,506
  • 7
  • 88
  • 140