1

我有一个名为的类Info,它的方法load包含这段代码:

Circuito[] circuito=new Circuito[19];
for(int i=0;i<circuito.length;i++)
   circuito[i] = new Circuito(nome,immPath,sfondoPath,previsioni,giri,tempoGiro,carico);

我正确传递了所有参数(我打印了 toString() 方法来检查它是否有效)。然后,在另一个名为我的类中,New我有以下代码:

Info info=new Info();
info.load();
System.out.println(info.getCircuito()[0].toString());

(该类Info包含getCircuito返回整个数组的方法)。

然后,我收到此错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at New.<init>(New.java:21)

第 21 行是该System.out.print行。

我不明白是哪个问题...谢谢您的帮助!

4

2 回答 2

2

生产线中 NPE 仅有的 3 种可能性

System.out.println(info.getCircuito()[0].toString());

是:

  • 信息是null。不可能,因为您之前成功调用info.load()过。
  • getCircuito()返回null
  • getCircuito()[0]null

而已。因此,在您使用显示代码的情况下,load()它可能是getCircuito()返回的null.

编辑:找到原因。你在打电话

Circuito[] circuito=new Circuito[19];

在你的load()方法中。因此,您不是将新数组分配给类变量,而是分配给局部范围内的新变量,该变量在load()方法之后再次消失。将所述行更改为

circuito=new Circuito[19];

你应该没事。

于 2013-05-04T18:20:05.997 回答
0

由于某种原因,您肯定没有填充您的数组。可能你已经在一个非常狭窄的范围内定义了类的Circuito类实例 ,比如循环。Info

尝试调用 Info 类中的另一个索引。如果可行,那么问题出在索引 0 上。

尝试获取整个数组并打印它。我猜整个数组将为NULL。

最后,检查您是否在不必要的地方使用了静态关键字。

于 2013-05-04T20:19:24.293 回答