gpt4 book ai didi

java - 为什么从不同的类引用 Image 时会出现 java.lang.NullPointerException ?

转载 作者:行者123 更新时间:2023-12-02 06:46:24 25 4
gpt4 key购买 nike

我正在为 PC 创建 Breakout 的克隆,今​​晚早些时候我发现抛出 NullPointerException 并显示在控制台中。奇怪的是,方法 run() 被告知捕获发生的任何异常并显示其堆栈跟踪,然后忽略它们,但这次它在开始时卡住了游戏,在日志中,按键仍然是已跟踪,但游戏中没有任何反应。显然,游戏没有中止,但不会重新绘制。

它似乎来自一行代码:

 if (by >= bricks[0].y && by <= bricks[0].y + bricks[0].img.getHeight(null) && bx >= bricks[0].x && bx <= bricks[0].x + bricks[0].img.getWidth(null)) {

这是日志和堆栈跟踪(整个内容):

Game starting, menu boot.
Menu Loaded, JFrame visible.
Running thread.
Play clicked, start game initialization.
Creating JFrame.
JFrame created and visible.
Starting game thread
Initialize user variables.
Initialized user variables.
Initialization complete, start game.
java.lang.Execption in line 86/87, class Game. Stacktrace:
java.lang.NullPointerException
at Game.move(Game.java:195)
at Game.run(Game.java:86)
at java.lang.Thread.run(Thread.java:722)
Space hit!
Key ARROWLEFT hit.
Key ARROWLEFT hit.
Key ARROWLEFT hit.
Key ARROWLEFT hit.
Key ARROWLEFT hit.
Key ARROWLEFT hit.
Key ARROWLEFT hit.
Key ARROWLEFT released.
Key ESCAPE Hit!

希望这个问题能够得到解决。

最佳答案

让我们看看那条“线”:

   if (by >= bricks[0].y && 
by <= bricks[0].y + bricks[0].img.getHeight(null) &&
bx >= bricks[0].x &&
bx <= bricks[0].x + bricks[0].img.getWidth(null)) {

假设bx , by ,以及xy字段都是原始类型(例如 int ),那么这里是可能导致 NPE 的列表:

  • bricks变量是 null
  • bricks 的第零个元素是 null
  • bricks[0].img 的值是 null

如果bx , by , x和/或y是一种包装类型,那么其中之一可能是 null 。这会在拆箱该值时导致 NPE。

不是通过null引起的到getHeightgetWidth方法,因为 1) 我相信这是有效的,2) 如果不是,那么 NPE 将被扔到与堆栈跟踪显示的不同的位置。

(我无法判断在这些调用中传递 null 是否正确...但无论哪种方式,根据您提供的证据,这都不是导致此 NPE 的原因。)

<小时/>

如果您想弄清楚到底是什么导致了问题,请调试代码或添加一些跟踪记录来测试哪些可能是 null实际上是null .

关于java - 为什么从不同的类引用 Image 时会出现 java.lang.NullPointerException ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18603439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com