我正在创建支票簿,无法为每个单独的帐户创建要写入的文件。当我尝试创建文件时,我收到错误“未报告的异常IOException;必须被捕获或声明被抛出”。我尝试声明我的动作侦听器方法抛出异常,但这使得动作侦听器方法不再能够工作。然后我尝试创建一个单独的方法来创建文件,并按下按钮调用,但我仍然遇到相同的错误
这是我的代码:
public void actionPerformed(ActionEvent e) {
...
if (e.getSource() == create) {
creatNewAccount(name3.getText());
BALANCE = Double.parseDouble(name2.getText());
}
}
public void creatNewAccount(String s) throws IOException {
FileWriter fw = new FileWriter(s + ".txt", false);
}
答案 0 :(得分:2)
IOException
是一个经过检查的例外。鉴于您在ActionListener
内调用它,重新抛出异常不是一个选项,因此您需要捕获它。
try {
creatNewAccount(name3.getText());
} catch (IOException e) {
e.printStackTrace();
// more exception handling
}
答案 1 :(得分:2)
creatNewAccount
可能会抛出IOException
。 IOException
不是RuntimeException
,所以你必须抓住它。
if (e.getSource() == create) {
try {
creatNewAccount(name3.getText());
} catch (IOException ie) {
ie.printStackTrace();
// handle error
}
BALANCE = Double.parseDouble(name2.getText());
}
有关详情,请参阅The Catch or Specify Requirement和Catching and Handling Exceptions。
我注意到的其他一些事情:
- 您要找的单词是 create ,而不是 creat 。
- 您正在为BALANCE
分配内容。大写名称通常保留给常量。考虑重命名此变量balance
。
- 考虑文本字段的更具描述性的名称。 name2
和name3
并没有多说。
答案 2 :(得分:1)
在actionPerformed()
中,您需要在createNewAccount
电话周围放置一个try / catch块。一旦抓到异常你做什么取决于你 - 一个简单的事情是把它包裹在一个RuntimeException
中,不需要被捕获(但可能会破坏你的过程,直到你做更精细的事情为止)。
public void actionPerformed(ActionEvent e) {
...
if (e.getSource() == create) {
try {
creatNewAccount(name3.getText());
} catch( IOException ioe) {
System.err.println("Whoops! " + ioe.getMessage());
throw new RuntimeException("Unexpected exception", ioe);
}
BALANCE = Double.parseDouble(name2.getText());
}
}
答案 3 :(得分:1)
您可能只需要在方法中捕获异常:
public void creatNewAccount(String s) {
try{
FileWriter fw = new FileWriter(s + ".txt", false);
} catch (IOException e){
//TODO something to handle the error
}
}