空指针异常 JLabel

Null pointer exception JLabel

提问人: 提问时间:3/16/2009 最后编辑:kenju 更新时间:9/17/2022 访问量:3217

问:

为什么当我尝试在标签上运行它时得到 NullPointerException:

JLabel player1CurrentScore = new JLabel("" + matchPlay.returnPL1GamesWon(),
                                        JLabel.CENTER);

是因为我不能像这样连接两个字符串吗?

理想情况下,我正在尝试将标签设置为玩家的分数,以便在需要时可以正确地递增。

这是我的异常堆栈转储:

java.lang.NullPointerException
at GUI.makeFrame(GUI.java:71)
at GUI.<init>(GUI.java:28)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at bluej.runtime.ExecServer$3.run(ExecServer.java:808)
java nullpointerexception jlabel

评论

0赞 Eddie 3/16/2009
题外话:如果 matchPlay.returnPL1GamesWon() 是数字,那么在最近的 JVM 中执行此操作的更好方法是 String.valueOf(matchPlay.returnPL1GamesWon()) 并避免 “”+ 来“字符串化”数字。正如其他人所说,NullPointerException 必须来自 matchPlay 为 null。

答:

3赞 Paul Tomblin 3/16/2009 #1

除非 matchPlay 为 null 或 matchPlay.returnPL1GamesWon() 本身抛出 null 指针异常,否则不会出现任何会导致 null 指针异常的内容。

更新:基于异常来自 GUI.makeFrame 的事实,我不得不问你是否真的有一个图形显示?这是命令行应用程序、Swing 应用程序还是小程序?看起来您正在尝试创建一个没有图形上下文的 JLabel。

评论

0赞 brabster 3/16/2009
我认为如果matchPlay.returnPL1GamesWon()返回null,它只会打印'null',而不会抛出NullPointerException?
0赞 Eddie 3/16/2009
是的,布拉布斯特说的。但是,matchPlay.returnPL1GamesWon() 本身可能会抛出 NullPointerException。
0赞 3/16/2009
如果我知道如何使用这个网站,我会准确地发布错误消息<stacktrace 或任何它的名字>但是我确实在上面发表了评论,说这是不可能的
0赞 Paul Tomblin 3/16/2009
@Roberto,您应该能够编辑您的问题 - 只需单击其下方的“编辑”按钮即可。
3赞 brabster 3/16/2009 #2

根据问题中的信息:引用 matchPlay 为 null。

已更新:给定 matchPlay 不能为 null 的信息,则在 matchPlay 上调用的方法必须引发异常。检查上一个方法调用的堆栈跟踪,应该有助于查明问题。

评论

0赞 3/16/2009
不可能是因为matchPlay的其他一些方法正在工作,我有以下私人Game matchPlay<构造函数> matchPlay = new Game() 那么它怎么可能是空的?
0赞 brabster 3/16/2009
啊。你没这么说。在这种情况下,请参阅下面@Paul Tomblin 的回答。
0赞 Roberto Duran 3/16/2009 #3

我已经设法回答了这个问题,

这是我在构造函数中分配字段的顺序

对不起,打扰了

谢谢大家

1赞 Ruwan Pathirana 9/17/2022 #4

更改为:

player1CurrentScore = new JLabel("" + matchPlay.returnPL1GamesWon(),
                                    JLabel.CENTER);

此外,如果发生错误,您可以在公共类中添加 Jlabel 变量,

    public class YourClass{
             private JLabel player1CurrentScore;
    }