繁体   English   中英

在两个不同的类中尝试捕获NullPointerException错误

[英]try-catch NullPointerException Error within two different classess

我在Tournament类和Test类中有一个NullPointerException 我在Test类中调用Tournament的方法来定义,然后在Tournament类中对其进行分配以创建Team对象。 它为我提供了Tournament tour = new Tournament();NullPointerException Tournament tour = new Tournament(); File file = new(fileLocation);

我认为这是因为我声明了错误的文件路径,但该文件位于项目文件夹中。为了简化起见,我在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");
        }
    }

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

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

当前,它正在尝试在设置位置之前使用fileLocation初始化文件,因此会出现NullPointerException。

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

问题是,你的初始化fileTournament在一流的施工时间类,但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成员变量,因此已将其删除。

错误的路径永远不会抛出NullPointerException ,因此问题不在这里。

编辑:当指定的路径为null时, File可以抛出NullPointerException 并且在初始化fileLocation之前先调用它,然后尝试

public Tournament(String x){
     fileLocation=x;
     file = new File(fileLocation);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM