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给我的帮助了。