java为什么在另一个类中使用PrintWriter时会出现PrintWriter空指针异常
我已经在任务和支持工具中使用Java有一段时间了,但我从来没有研究过如何在一个类中使用PrintWriter
,然后可以从另一个类中使用,例如,我有几个XML文件要解析,然后从单个输入源(一个.xls报告)输出到表,我有几个用于不同XML和子节点的输出文件。所以我创建了这个类来创建一个PrintWriter
并报告输出文件是否已经存在:
public class PrintAdmin
{
public PrintWriter pout;
public int PrintFromElement = 0;
public PrintAdmin(String Dirname) throws IOException
{
PrintWriter pout = new PrintWriter(new BufferedWriter(new FileWriter((Dirname))));
int PrintFromElement = 0;
File f1 = new File("FirstNode.CSV");
if(f1.exists())
{ PrintFromElement = 1; }
else
{ PrintFromElement = 0; }
}
public void poutclose()
{
this.pout.close();
}
}
这称为:
public class AuditParser
{
public static File Auditor;
public static void main(String[] args) throws IOException
{ PrintAdmin xmltype1out = new PrintAdmin(xmltype1);
...
for (int xml1 = PrintAdmin.PrintFromElement: xml1 < xml1parsed.header.size();xml1++)
{
...dostuff...
}
这个模式重复4到5次
我的问题是,虽然我在AuditParser
中使用PrintAdmin
得到了一个好的编译,但在运行时我得到了一个NullPointerException
我想这样做,让一个简单的类创建一个PrintWriter
,它根据文件是否已经存在指示打印头记录。它在这里很有用,我相信它在其他地方也会对我有用
# 1 楼答案
问题在于这个
声明了一个实例变量,但它从未初始化,但问题是为什么,因为 在你的构造函数中,你做了这样的事情
它正在创建一个新的局部变量pout,并且已初始化,但上面定义的字段从未初始化。你可以这样做来解决这个问题
您也不需要在构造函数中再次使用
PrintFromElement
,因为您已经将它定义为字段# 2 楼答案
您在构造函数中定义了一个局部变量,该变量隐藏了字段,但从未赋值。在构造函数中删除
PrintWriter
标记