我正在完成此操作,但有些回滚,因此当我尝试使用 try-catch 写入文本文件时,它会给我这样的错误:
Exception in thread "main" java.lang.NullPointerException
它指向这一行:
output.format("%-10s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%n", ....
我读到这可能会发生,因为引用的对象是null
或其他东西。但是在输出行之前,我尝试使用 system.out.println()
输出所有值,这没有问题。
有没有解决方案?
try {
record.setIncome(input.nextDouble());
record.setAtv(atv_sum);
record.setSumAtv(atv_sum+45.00);
DecimalFormat df = new DecimalFormat("#.###");
double soc_apd=(((record.getIncome()-record.getSumAtv())/simt)*soc_proc);
double iedz=((((record.getIncome()-record.getSumAtv()-soc_apd))/simt)*iedz_proc);
df.format(iedz);
double netto =record.getIncome()-(iedz+soc_apd);
if((record.getIncome()>=min_alga)){
output.format("%-10s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%n",
year_n,
months[month_n],
df.format(record.getIncome()),
df.format(record.getAtv()),
df.format(record.getSumAtv()),
df.format(iedz),
df.format(soc_apd),
df.format(netto));
}else{
String error_1 = "Kļūda ! Alga ievadÄ«ta zem 0 vai minimÄ?lÄ?s algas "+min_alga+" LS";
System.err.println(error_1);
input.nextLine();
}
}
catch ( FormatterClosedException formatterClosedException ){
System.err.println(error_2);
return;
}
catch (NoSuchElementException elementException){
System.err.println(error_3);
input.nextLine();
}
我发现哪个记录同时存在问题.输出如下所示:
所以df.format(record.getIncome())
共同解决了问题
2013
45.0
Exception in thread "main" java.lang.NullPointerException
at course.CreateTextFile.addRecords(CreateTextFile.java:163)
at course.calc.CreateTextFileTest(calc.java:16)
at course.calc.main(calc.java:33)
321.468
165.55
1062.982
1550.0
可能是因为output
本身是空的?如果您正在打印的变量之一为 null,则不会获得 null指针,因为它只会打印文本"null"。但是对于您正在格式化的参数df
您会这样做。所以这些是一些可能的候选人。这就像调试代码并检查 null 一样简单。
顺便说一句,我什至没有看到声明的输出,但它很可能应该是一个字符串。在这种情况下,输出为 null 并不重要,因为 format
是一个静态方法。不过,您应该以静态方式访问方法格式,即 String.format
所以,总结一下:
- 向我们展示
output
是什么。 - 如果
output
是字符串,则以静态方式访问format
。 - 了解如何使用调试器。
调试并验证从以下行null
的对象...可能性是..例如 months, output
等
output.format("%-10s%-20s%-20s%-20s%-20s%-20s%-20s%-20s%n",
year_n,
months[month_n],
df.format(record.getIncome()),
df.format(record.getAtv()),
df.format(record.getSumAtv()),
df.format(iedz),
df.format(soc_apd),
df.format(netto));
}