Java 返回NullPointerException的数组

Java 返回NullPointerException的数组,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,我一直在创建一个Snakes程序,其中包含一个段数组。在这种情况下,我认为使用数组作为顺序至关重要。第一个问题是,即使在我创建了一个“newSegment实例”之后,它也不会显示任何正方形(这是蛇的第一段)。但是,当我将System.out.println()语句放在paint方法(稍后显示)中时,它抛出一个NullPointerException。代码如下: 注意:方法increaseSegmentCount()从外部类调用过一次。而且,这不是完整的代码 蛇 将System.out.print

我一直在创建一个Snakes程序,其中包含一个
段数组
。在这种情况下,我认为使用数组作为顺序至关重要。第一个问题是,即使在我创建了一个“new
Segment
实例”之后,它也不会显示任何正方形(这是蛇的第一段)。但是,当我将
System.out.println()
语句放在paint方法(稍后显示)中时,它抛出一个
NullPointerException
。代码如下:

注意:方法
increaseSegmentCount()
从外部类调用过一次。而且,这不是完整的代码

System.out.println
语句放入后的
paint()
方法:

@Override
    public void paint(Graphics g) {
        for (Segment segment : segments) {
            if (segment != null)
                System.out.println("Called")
                segment.paint(g);
        }
    }
类(非常简单的类)

View
类中的
paintComponent()
方法(用于调试)

最后是错误(在插入print语句之后…在插入之前没有错误):


有什么想法吗?另外,请不要将此标记为重复,并将我指向另一个显示如何解决NPE问题的帖子。。。我已经知道该做什么和正在发生什么(大部分情况下),但这是我遇到的一件奇怪的事情,非常令人困惑。谢谢。

当您添加打印语句时,您需要{}作为您的if

if (segment != null) {
            System.out.println("Called")
            segment.paint(g);
}

您可以考虑使用自动代码格式化程序,这将使缩进明显。

您在添加打印语句时需要{}……< /p>
if (segment != null) {
            System.out.println("Called")
            segment.paint(g);
}

您可以考虑使用自动代码格式化程序,这将使缩进明显。

@Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        for (Entity entity : model.getEntities()) {
            entity.paint(g);
        }
    }
Called
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Snake.paint(Snake.java:61)
    at View.paintComponent(View.java:50)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
    at javax.swing.RepaintManager.paint(Unknown Source)
    at javax.swing.JComponent._paintImmediately(Unknown Source)
    at javax.swing.JComponent.paintImmediately(Unknown Source)
    at javax.swing.RepaintManager$4.run(Unknown Source)
    at javax.swing.RepaintManager$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
    at javax.swing.RepaintManager.access$1200(Unknown Source)
    at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
if (segment != null) {
            System.out.println("Called")
            segment.paint(g);
}