2011-10-04 33 views
3

我創建了一個窗口,並希望在應用程序關閉前用方法windowStateChanged攔截出口以保存數據。但是,它似乎並沒有在關閉之前保存數據。我該如何解決這個問題?JFrame攔截出口接近保存數據

見下面的代碼:

public class InventoryMainFrame extends JFrame implements WindowStateListener{ 
    //set up the main window - instantiate the application 
    private InventoryInterface inventoryInterface; //panel that contains menu choices and buttons 

    public InventoryMainFrame(){ //main window   
     setTitle("Inventory System"); 
     setSize (500,500); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new BorderLayout()); 
     //setLocationRelativeTo(null); //center window on the screen   
     inventoryInterface = new InventoryInterface(); //set up the panel that contains menu choices and buttons 
     add(inventoryInterface.getMainPane());   //add that panel to this window     
     pack(); 
     setVisible(true); 

     //display window on the screen   
    } 

public static void main(String[] args) {   
    //sets up front end of inventory system , instantiate the application 
    InventoryMainFrame aMainWindow = new InventoryMainFrame(); 
} 

@Override 
public void windowStateChanged(WindowEvent w) { 
    //intercept the window close event so that data can be saved to disk at this point 
    if (w.getNewState()==WindowEvent.WINDOW_CLOSED){ 
     //save the index file 
     try{ 
      inventoryInterface.getInventory().saveIndexToFile(); 
      System.out.println("saving"); 
      dispose(); //dispose the frame 
     } 
     catch(IOException io){ 
      JOptionPane.showMessageDialog(null,io.getMessage()); 
     } 
    }  
} 

}

回答