【问题标题】:Java JFrame / Graphics driver [duplicate]Java JFrame /图形驱动程序[重复]
【发布时间】:2015-05-04 07:20:22
【问题描述】:

当我想绘制我的多边形 Pizza 对象时,我不断收到 NullPointerException。我收到此错误消息:

Exception in thread "main" java.lang.NullPointerException
    at Pizza.<init>(Pizza.java:9)
    at PolyDemo$PolyDemoPanel.getRandShape(PolyDemo.java:91)
    at PolyDemo$PolyDemoPanel.<init>(PolyDemo.java:54)
    at PolyDemo.<init>(PolyDemo.java:19)
    at PolyDemo.main(PolyDemo.java:28)

我没有遇到圆形和矩形的问题,为什么这不起作用?这是我的披萨课:

    import java.awt.*;

    public class Pizza extends Shape{
        private Polygon P;

        public Pizza(int x, int y) {
            super(x,y);
            P.xpoints = new int[]{x, x+100, x+200};
            P.ypoints = new int[]{y, y+100, y};
            P.npoints = 3;
        }

        @Override
        public void draw(Graphics g){
            g.setColor(Color.RED);
            g.drawPolygon(P);
        }
    }

这是驱动程序:

    import java.util.*;
    import java.awt.*;
    import javax.swing.*;

    class PolyDemo extends JFrame {
        public PolyDemo() {
            getContentPane().add( new PolyDemoPanel());
            setSize( 300,300 );
            setVisible( true );
            setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        }
    public static void main( String args[] ) {
        PolyDemo myApp = new PolyDemo();
    }
    public class PolyDemoPanel extends JPanel {     
        Shape[] myShapes= new Shape[20];

        public PolyDemoPanel() {
            for( int i = 0; i < 20; i++ ) {
                myShapes[i] =  getRandShape();
            }
        }
        public void paint( Graphics g ) {
            super.paint(g); 

            for( int i = 0; i < myShapes.length; i++ ){
                myShapes[i].draw( g );  
            }   
        }
        public int getRandInt() {
            return ( (int) ( Math.random() * 200 ) );   
        }
        public Shape getRandShape() {
            Shape retVal = null;
            final int x = getRandInt();
            final int y = getRandInt();
                retVal = new Pizza(x, y);
                return retVal;
            }
        }   
    }

【问题讨论】:

  • 注意:不要打电话给 Polyingon P。只有类型名称的开头应该有一个大写字母(并且常量都是大写的)。字段、局部变量和方法应以小写字母开头。
  • 你不妨看看Working with Geometry

标签: java graphics polygon shape


【解决方案1】:

您声明了 poligon,但没有创建对象。这样,当您在 Pizza 的构造函数中使用它时,它为 null。在构造函数中使用它之前,您需要创建一个实例。 P 也是变量的坏名

public Pizza(int x, int y) {
        super(x,y);
       //P is null here - add P=new Poligon()
        P.xpoints = new int[]{x, x+100, x+200};
        P.ypoints = new int[]{y, y+100, y};
        P.npoints = 3;
    }

【讨论】:

    【解决方案2】:

    您没有初始化您的Polygon 字段P。 试试这个:

    public Pizza(int x, int y) {
        super(x,y);
        P = new Polygon();
        P.xpoints = new int[]{x, x+100, x+200};
        P.ypoints = new int[]{y, y+100, y};
        P.npoints = 3;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 2011-09-06
      • 2018-12-07
      • 2011-12-27
      • 2014-05-24
      相关资源
      最近更新 更多