我试图在窗口(和脚本)关闭之前保存信息(矢量到文件)。我到处检查和搜索我无法找到该做什么。
我遇到的错误是
未报告的异常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);
}
});
答案 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()中抛出异常