错误:线程“main”java.lang.NullPointerException中的异常

时间:2018-03-28 14:47:20

标签: java

readfile类是我创建的类,所以我可以从file.txt读取一些字符串,然后在控制台中打印它们:

   package mainpackage;
import java.io.*;
import java.util.*;

public class readfile {

    private Scanner x;

    public void openFile(){
            try {
                x = new Scanner(new File("file.txt"));
            } catch (Exception e) {
                System.out.println("Could not find file");
            }

    }

    public void readFile(){
        while(x.hasNext()){
            System.out.print(x.nextLine()+"\n");
        }
    }

    public void closeFile(){
        x.close();
    }

}

但是当我在main中调用类的方法时,我得到如下错误: 线程“main”java.lang.NullPointerException中的异常。这是主要的电话:

public static void main(String [] args)
{


    readfile r = new readfile();
    r.openFile();
    r.readFile();
    r.closeFile();


}

有什么想法吗?谢谢

3 个答案:

答案 0 :(得分:2)

您不应该在openFile()中捕获异常,或者如果捕获它,如果在openFile()方法中出现异常则抛出新异常Scanner将为null并且在其他方​​法中获得空指针异常。

package mainpackage;
import java.io.*;
import java.util.*;

public class readfile {

    private Scanner x;

    public void openFile() throws Exception{
            try {
                x = new Scanner(new File("file.txt"));
            } catch (Exception e) {
                //in here throw (this/another) exception to caller or don't catch this exption

                System.out.println("Could not find file");
                throw new Exception("Could not find file");
            }

    }

    public void readFile(){
        while(x.hasNext()){
            System.out.print(x.nextLine()+"\n");
        }
    }

    public void closeFile(){
        x.close();
    }

}

测试的主要驱动因素:

public static void main(String [] args)
{
    try {
        readfile r = new readfile();
        r.openFile();
        r.readFile();
        r.closeFile();
     } catch (Exception e) {
            e.printStackTrace();
            System.out.println("got exception");

     }

}

答案 1 :(得分:-1)

您需要提供文件的实际路径

喜欢 - " /home/desktop/file.txt",  如果文件在你的内部,则提供相对路径 - /app/file.txt

答案 2 :(得分:-1)

如果抛出异常,“x”下的值是多少? 接下来会发生什么?

(您应该使用调试器来检查readFile()func)

我需要澄清:有人要求提出问题让@Marios P站起来思考。