使用JFileChooser时Java Unreported Exception

时间:2015-10-18 23:24:32

标签: java exception jfilechooser

public FileReader() throws FileNotFoundException {
    //create fileChooser
    JFileChooser chooser = new JFileChooser();
    //open fileChooser
    int returnValue = chooser.showOpenDialog(new JFrame());
    try {
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            file = chooser.getSelectedFile();
        }
    } catch (FileNotFoundException e) {

    }
}

我正在编写一个程序来读取文本文件并将其放入一个字符串(单词)数组中。这只是程序的文件阅读器,当我尝试从代码的另一部分调用该方法时,它给了我一个错误。任何想法将不胜感激;它可能是一个简单的修复,我似乎无法找到它。

这是错误:

  

未报告的异常FileNotFoundException;必须被抓住或宣布被抛出

2 个答案:

答案 0 :(得分:1)

您已将构造函数声明为抛出已检查的异常:

public FileReader() throws FileNotFoundException

在调用此构造函数的任何地方,您必须声明从该方法抛出它,例如

public static void main(String[] args) throws FileNotFoundException {
  new FileReader();
}

或抓住并处理它,例如

public static void main(String[] args) {
  try {
    new FileReader();
  } catch (FileNotFoundException e) {
    // Handle e.
  }
}

或者,如果FileReader()中没有任何内容引发未被捕获的FileNotFoundException(就像在您的代码中,FileNotFoundException被捕获并被吞并),请从{{throws FileNotFoundException移除FileReader() 1}},允许例如

public static void main(String[] args) {
  new FileReader();
}

答案 1 :(得分:1)

你在这里通过检查异常变得有点困难。主要的是检查FileNotFoundException,它必须:

  • 在其使用点被发现try...catch声明,或
  • 声明通过方法签名中的throws声明抛出。

通常想同时做这两件事,你现在就是这样。

作为进一步的建议,您也不想做以下任何一项:

  • 在构造函数中抛出异常
  • 没有对捕获的异常做任何事情

所以我个人的建议是抓住异常并处理它......

public FileReader()  {
    //create fileChooser
    JFileChooser chooser = new JFileChooser();
    //open fileChooser
    int returnValue = chooser.showOpenDialog(new JFrame());
    try {
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            file = chooser.getSelectedFile();
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

...但除非我正在查看错误的库,I don't see anywhere where a FileNotFoundException is even thrown on JFileChooser!这样可以使您的代码足够简单 - 在此时不要打扰* try...catch

*:你实际上删除它,因为它是一个编译错误,可以捕获一个永不抛出的已检查异常。