Ошибка Java: конструктор по умолчанию не может обработать исключение типа исключения FileNotFound - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь прочитать входные данные из файла, который нужно передать в Java-апплет, чтобы он отображался как уровень Pac-man, но мне нужно использовать что-то похожее на getLine () ... Поэтому я искал что-то похожее и вот код, который я нашел:

File inFile = new File("textfile.txt");
FileInputStream fstream = new FileInputStream(inFile);//ERROR
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));

Строка, помеченная мной как «ОШИБКА», выдает сообщение об ошибке: «Конструктор по умолчанию не может обработать исключение типа FileNotFoundException, генерируемое неявным супер-конструктором. Необходимо определить явный конструктор».

Я искал это сообщение об ошибке, но все, что я нашел, похоже, не связано с моей ситуацией.

Ответы [ 3 ]

7 голосов
/ 20 февраля 2012

Либо объявите явный конструктор в вашем подклассе, который выдает FileNotFoundException:

public MySubClass() throws FileNotFoundException {
} 

Или окружите код в вашем базовом классе блоком try-catch вместо выброса исключения FileNotFoundException:

public MyBaseClass()  {
    FileInputStream fstream = null;
    try {
        File inFile = new File("textfile.txt");
        fstream = new FileInputStream(inFile);
        // Get the object of DataInputStream
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        // Do something with the stream
    } catch (FileNotFoundException ex) {
        Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
    } finally {
        try {
            // If you don't need the stream open after the constructor
            // else, remove that block but don't forget to close the 
            // stream after you are done with it
            fstream.close();
        } catch (IOException ex) {
            Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, null, ex);
        }
    }  
} 

Не связано, но поскольку вы кодируете Java-апплет, помните, что вам нужно подписать его для выполнения операций ввода-вывода.

1 голос
/ 20 февраля 2012

Вам нужно окружить свой код попыткой и отловом следующим образом:

try {
    File inFile = new File("textfile.txt");
    FileInputStream fstream = new FileInputStream(inFile);//ERROR
} catch (FileNotFoundException fe){
    fe.printStackTrace();
}
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
0 голосов
/ 20 февраля 2012

Это догадки, так как у нас нет полного кода.

Из Javadoc:

public FileInputStream(File file) throws FileNotFoundException

Это означает, что когда вы делаете новый FileInputStream(), как вы, он может вернуться с FileNotFoundException. Это проверенное исключение, которое необходимо либо перебросить (т. Е. Добавить 'throws FileNotFoundException' в методе, в котором вы делаете новое), либо перехватить (см. Другие ответы try / catch).

...