Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在两个不同的类中尝试捕获NullPointerException错误_Java_File - Fatal编程技术网

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

Java 在两个不同的类中尝试捕获NullPointerException错误,java,file,Java,File,我在锦标赛类和测试类中有一个NullPointerException。我调用锦标赛的方法在测试类中定义,然后在锦标赛类中分配它来创建团队对象。它在锦标赛巡回赛=新锦标赛()上给我一个NullPointerException和文件文件=新(文件位置) 我想这是因为我声明了错误的文件路径,但该文件位于项目文件夹中。为了方便起见,我在Test类中设置了该文件的目录,以便准确地知道问题所在,并在需要时更改该文件。如果您需要更多的类块,请进行注释 测试等级: Tournament tour = new

我在
锦标赛
类和
测试
类中有一个
NullPointerException
。我调用
锦标赛
的方法在
测试
类中定义,然后在锦标赛类中分配它来创建
团队
对象。它在
锦标赛巡回赛=新锦标赛()上给我一个
NullPointerException
文件文件=新(文件位置)

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

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

编辑: 当指定的路径为
null
时,
File
可以引发
NullPointerException
。如果要在初始化
文件位置之前调用它,请重试

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

您应该在
setFile
方法中初始化file变量

public void setFile(String x)
{
    this.fileLocation = x;
    file = new File(fileLocation);
}
File file;
目前,它正在尝试在您设置位置之前使用
fileLocation
初始化文件,因此出现了NullPointerException


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

问题是您在类构造时初始化
锦标赛
类中的
文件
,但是
fileLocation
是在
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
成员变量,因此已将其删除。

很难看到少量代码和没有堆栈跟踪的情况。还可以看到你有调试器吗?请添加完整的代码,无法理解你在做什么。就像在锦标赛类中一样,您在任何方法或构造函数之外初始化文件,为什么?在您的测试类中,您正在创建锦标赛对象,并在任何方法之外执行set方法。编辑:添加到answer谢谢,请在此处保留好的答案。我对它进行了一些编辑,使它读起来更清晰,但到目前为止还不错。干杯:)。我决定是时候回报StackOverflow给我的帮助了。