-3

我正在完成这项工作,但发生了一些回滚,所以当我尝试使用 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
4

2 回答 2

2

可能是因为output它本身是空的?如果您要打印的变量之一为空,您将不会得到空指针,因为它只会打印文本“空”。但是对于您正在格式化的参数,您会这样做df。所以这些是一些可能的候选人。这就像调试代码并检查什么是空的一样简单。

顺便说一句,我什至没有看到声明的输出,但它很可能应该是一个字符串。在这种情况下,输出为空并不重要,因为format它是一个静态方法。您应该以静态方式访问方法格式,即String.format

所以,总结一下:

  • 告诉我们是什么output
  • 如果output是字符串,则以format静态方式访问。
  • 了解如何使用调试器。
于 2013-11-06T15:02:11.537 回答
0

您需要调试并验证哪个对象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));
                                         }
于 2013-11-06T15:10:37.787 回答