我有一个包含以下信息的文件:
行数不一。教授正在使用其他文件来测试该程序。
我想从此文件中提取长名称并将其打印出来。
这就是我所拥有的:
public List<String> extractName(List<String> longName)
{
Data data = new Data();
Scanner scan = new Scanner(actualFile);
longName = new List<String>();
String line = scan.nextLine();
if(line.contains("---"))
{
while(line != null)
{
String[] name = line.split(" +");
longName.add(name[2]);
}
data.setLongName(longName);
}
return longName;
}
和我的main
方法以及另一种方法:
public static void main(String[] args) throws FileNotFoundException{
//process file
try{
File actualFile = new File(args[0]);
System.out.println("File was processed: true");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println("File was processed: false. Re-enter filename.");
return;
}
Data data = new Data();
printInfo(data); // error occurs here
}
public static void printInfo(Data d){
for(int i = 0; i < longName.size(); i++) //error occurs here
System.out.println(longName.get(i));
}
和我的班级,万一有人需要它:
public class Data{
private List<String> longName;
public void Data(){}
public void setLongName(List<String> theLongName){
longName = theLongName;
}
public List<String> getLongName(){
return longName;
}
}
但是当我运行它时,我收到了这个错误:
Exception in thread "main" java.lang.NullPointerException
at project2shm.printInfo(project2shm.java:35)
at project2shm.main(project2shm.java:18)
我很困惑。我在代码中标记了错误发生的位置。有人可以帮帮我吗?
答案 0 :(得分:1)
project2shm.main()
从不为longName
使用的project2shm.printInfo()
变量赋值。那个longName
变量显然是project2shm
类中的静态变量。
您没有提供project2shm
的完整来源,但它不会初始化longName
,也不会为其分配null
。无论哪种情况,都会导致您看到的NPE。