windowClosing()和抛出异常

时间:2014-04-06 10:24:09

标签: java swing exception file-io windowlistener

我试图在窗口(和脚本)关闭之前保存信息(矢量到文件)。我到处检查和搜索我无法找到该做什么。

我遇到的错误是

  

未报告的异常java.lang.exception;必须被抓住或宣布   被抛出savePlayers()。

但是,我使用loadPlayers执行相反的操作,但我没有遇到任何异常问题。请帮助任何人?代码是:

static public void savePlayers() throws Exception
{
    //serialize the List    
        try 
        {
        FileOutputStream file = new FileOutputStream(FILE_NAME);
            ObjectOutputStream output = new ObjectOutputStream(file);
            output.writeObject(players);
            output.close();
        }  
        catch(IOException ex)
        {
            System.out.println (ex.toString());
        }
}



public static void main (String[] args) throws Exception
{    
    JFrame frame = new JFrame("Teams");
    frame.setSize(700,500);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.addWindowListener(new WindowAdapter(){
        @Override
        public void windowClosing(WindowEvent e)
        {
            try
            {
                savePlayers();
            }
            catch (IOException ex) {
                 ex.printStackTrace();              
            }
            System.exit(0);
        }
    });

2 个答案:

答案 0 :(得分:1)

问题在于main方法

中的这些代码行
try
{
   savePlayers();
}
catch (IOException ex) {
   ex.printStackTrace();              
}

将其更改为捕捉

try
{
   savePlayers();
}
catch (Exception ex) {
   ex.printStackTrace();              
}

它会起作用。您的savePlayers()方法会引发Exception而非IOException

以上将解决问题,但我不知道为什么你的savePlayers()方法在方法定义中有这个奇怪的throws Exception?您应该考虑删除它,因为您的代码不会抛出任何异常。如果是,请与您的IOException一起处理。

答案 1 :(得分:1)

将savePlayers方法更改为:

static public void savePlayers() 

或者,将窗口侦听器操作更改为:

@Override
    public void windowClosing(WindowEvent e)
    {
        try
        {
            savePlayers();
        }
        catch (Exception ex) {
             ex.printStackTrace();              
        }
        System.exit(0);
    }

第一个选项更好,因为你实际上不需要在savePlayers()中抛出异常