Java 在“绘制”方法中绘制形状

Java 在“绘制”方法中绘制形状,java,swing,java-2d,Java,Swing,Java 2d,我的程序是一种用多线程在JPanel上画圆的方法。以下是我代码的一部分。我可以在paint方法中绘制图像,但在paint方法中无法绘制形状。怎么了 public void paint(Graphics g) { if (draw == true) { super.paint(g); Graphics2D g2d = (Graphics2D)g; for (Star s : this.items) {

我的程序是一种用多线程在
JPanel
上画圆的方法。以下是我代码的一部分。我可以在paint方法中绘制
图像
,但在paint方法中无法绘制
形状
。怎么了

public void paint(Graphics g) {
    if (draw == true) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D)g;
            for (Star s : this.items) {
                g2d.draw(s.cirle);
            }
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }
}

// a constructor of my star class
public Star(int delay,int initialX,int initialY){
    //ImageIcon ii = new ImageIcon(this.getClass().getResource("star.jpg"));
    //starImage = ii.getImage();
    Shape circle = new Ellipse2D.Float(initialX,initialY,100f,100f);
    System.out.println(circle);
    x=initialX;
    y=initialY;
    randomDesXY();
    this.delay=delay;
}
错误消息: 线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常 位于java.awt.geom.Path2D$Float.(Path2D.java:232) 位于java.awt.geom.Path2D$Float。(Path2D.java:207) 位于sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525) 位于sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148) 位于sun.java2d.pipe.validatePie.draw(validatePie.java:154) 位于sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383) at tma1.Board.paint(Board.java:61) 位于javax.swing.JComponent.paintooffscreen(JComponent.java:5221) 位于javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 位于javax.swing.RepaintManager.paint(RepaintManager.java:1206) javax.swing.JComponent.\u(JComponent.java:5169) 位于javax.swing.JComponent.paintInstance(JComponent.java:4980) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:770) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:728) 位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 在javax.swing.repaitmanager.access$700(repaitmanager.java:59) 在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1621) 在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 在java.awt.EventQueue.access$000(EventQueue.java:101) 在java.awt.EventQueue$3.run(EventQueue.java:666) 在java.awt.EventQueue$3.run(EventQueue.java:664) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:128) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:117) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 位于java.awt.geom.Path2D$Float.(Path2D.java:232) 位于java.awt.geom.Path2D$Float。(Path2D.java:207) 位于sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525) 位于sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148) 位于sun.java2d.pipe.validatePie.draw(validatePie.java:154) 位于sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383) at tma1.Board.paint(Board.java:61) 位于javax.swing.JComponent.paintooffscreen(JComponent.java:5221) 位于javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 位于javax.swing.RepaintManager.paint(RepaintManager.java:1206) javax.swing.JComponent.\u(JComponent.java:5169) 位于javax.swing.JComponent.paintInstance(JComponent.java:4980) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:770) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:728) 位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 在javax.swing.repaitmanager.access$700(repaitmanager.java:59) 在javax.swing.repaitmanager$ProcessingRunnable.run(repaitmanager.java:1621) 在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 在java.awt.EventQueue.access$000(EventQueue.java:101) 在java.awt.EventQueue$3.run(EventQueue.java:666) 在java.awt.EventQueue$3.run(EventQueue.java:664) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:128) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:117) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 在java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常 位于java.awt.geom.Path2D$Float.(Path2D.java:232) 位于java.awt.geom.Path2D$Float。(Path2D.java:207) 位于sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525) 位于sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148) 位于sun.java2d.pipe.validatePie.draw(validatePie.java:154) 位于sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383) at tma1.Board.paint(Board.java:61) 位于javax.swing.JComponent.paintooffscreen(JComponent.java:5221) 位于javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 在javax.swing.RepaintManager.paint(repaitmanager.java:1206) javax.swing.JComponent.\u(JComponent.java:5169) 位于javax.swing.JComponent.paintInstance(JComponent.java:4980) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:770) 位于javax.swing.repainmanager.paintDirtyRegions(repainmanager.java:728) 位于javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 在javax.swing.repainmanager。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:232)
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:207)
    at sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525)
    at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383)
    at tma1.Board.paint(Board.java:61)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:232)
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:207)
    at sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525)
    at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383)
    at tma1.Board.paint(Board.java:61)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:232)
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:207)
    at sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525)
    at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383)
    at tma1.Board.paint(Board.java:61)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:232)
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:207)
    at sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525)
    at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383)
    at tma1.Board.paint(Board.java:61)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:232)
    at java.awt.geom.Path2D$Float.<init>(Path2D.java:207)
    at sun.java2d.pipe.BufferedRenderPipe.draw(BufferedRenderPipe.java:525)
    at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:148)
    at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:154)
    at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2383)
    at tma1.Board.paint(Board.java:61)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.

................
public Star(int delay,int initialX,int initialY){
    Shape circle = new Ellipse2D.Float(initialX,initialY,100f,100f);