未报告的异常必须被捕获或声明被抛出

use*_*955 -1 java

可能重复:
为什么我会得到"例外; 当我尝试编译我的Java代码时,必须被捕获或声明被抛出?

谢谢你解决我的第一个问题,我现在收到一个新的错误

import java.io.*;
import javax.swing.*;

public class FileBrowser {
    public static void main(String[] args) throws IOException {

        JFileChooser chooser = new JFileChooser();
        chooser.showOpenDialog(null);
        File file = chooser.getSelectedFile();
        String filename = file.getName();
        System.out.println("You have selected: " + filename);

        FileReader fr = new FileReader("filename"); 
        BufferedReader br = new BufferedReader(fr); 
        String s; 
        while((s = br.readLine()) != null) { 
            System.out.println(s); 
        } 
        fr.close(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

java.io.FileNotFoundException: filename (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:97)
    at java.io.FileReader.<init>(FileReader.java:58)
    at FileBrowser.main(FileBrowser.java:13)
Run Code Online (Sandbox Code Playgroud)

是从文件浏览器中没有正确获取文件名的错误?

Mar*_*ers 9

Java中有检查和未检查的异常.必须声明您的方法抛出的已检查异常.该FileReader构造函数可以抛出一个FileNotFoundException是经过检查的异常.代码中的一些其他方法调用也可以抛出已检查的异常.

如果您调用一个可以抛出已检查异常的方法,那么您需要捕获异常并处理它或声明您的方法抛出此异常.即使您认为永远不会抛出异常,您也必须执行其中一项操作.不这样做是编译错误.

添加一个throws:

public static void main(String[] args) throws IOException {
Run Code Online (Sandbox Code Playgroud)

或使用try/catch块包围代码:

try {
    // ...
} catch (IOException e) {
    e.printStackTrace();
    // Or ask the user for a different filename...
}
Run Code Online (Sandbox Code Playgroud)