有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

两个不同类中的java trycatch NullPointerException错误

我在Tournament类和Test类中有一个NullPointerException。我调用Tournament的方法在Test类中定义,然后在锦标赛类中分配它来创建Team对象。它给了我一个关于{}和{}的{}

我想这是因为我声明了错误的文件路径,但该文件位于项目文件夹中。为了方便起见,我在Test类中设置了文件的目录,以便准确地知道问题所在,并在需要时更改文件。如果您需要更多的类块,请进行注释

测试等级:

 Tournament tour = new Tournament();
 tour.setFile("Tourney2Teams.csv"); 

锦标赛:

Scanner input;
    public String fileLocation;

    public void setFile(String x)
    {
        this.fileLocation=x;
    }
    File file = new File(fileLocation);

这是读取文件的方法:

public void readingFile()
    {
        try{
            input = new Scanner(file).useDelimiter(",");
        }
        catch (FileNotFoundException e)
        {
            System.out.print("File Not Found\n");
        }
    }

共 (3) 个答案

  1. # 1 楼答案

    错误的路径永远不会抛出NullPointerException,所以问题不在这里

    编辑: ^当指定的路径为null时,{}可以抛出NullPointerException。如果要在初始化fileLocation之前调用它,请重试

    public Tournament(String x){
         fileLocation=x;
         file = new File(fileLocation);
    }
    
  2. # 2 楼答案

    问题是,您正在类构造时初始化Tournament类中的file,但是fileLocation之后在setFile方法中初始化。要解决此问题,请将File的构造移到setFile方法中:

    class Tournament {
    
        private File file;
        public void setFile(String fileLocation)
        {
            this.file = new File(fileLocation);
        }
        // ...
    }
    

    或者改为在构造函数中创建文件:

    class Tournament {
    
        private File file;
        public Tournament(String fileLocation)
        {
            this.file = new File(fileLocation);
        }
        // ...
    }
    

    在这两个示例中,fileLocation成员变量似乎不需要,因此它已被删除

  3. # 3 楼答案

    您应该初始化setFile方法内部的file变量

    public void setFile(String x)
    {
        this.fileLocation = x;
        file = new File(fileLocation);
    }
    File file;
    

    目前,它试图在您设置位置之前使用fileLocation初始化文件,因此出现了NullPointerException

    为了进一步解释,当您构建锦标赛时,它会初始化所有变量,这意味着它会按照您的要求调用new File(fileLocation)。将方法放在代码的第一位并不重要;事实上,当它创建一个新实例时,fileLocation = null,在它尝试初始化它之前,您将没有机会设置它