【问题标题】:NullPointerException in java exercise assignmentjava练习作业中的NullPointerException
【发布时间】:2013-06-07 14:35:59
【问题描述】:

他我是java初学者,我正在做一个需要画汽车的练习。我书中的代码不起作用,我不知道为什么。

我不是 java 的菜鸟,我知道类、对象、方法等,但如果涉及到语法的确切行为,我仍然是菜鸟。

这是代码:

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

public class Vb1101 extends JFrame {
    public static void main( String args[] ){
        JFrame frame = new Vb1101();
        frame.setSize(350,200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("exercise 1101 draw car parts");
        frame.setContentPane( new Carpanel() );
        frame.setVisible( true );
    }
}

class Carpanel extends JPanel {
    public Car car;

    public void Carpanel(){
        car = new Car( 20, 150, 80, 30 );
    }

    public void paintComponent( Graphics g ){
        super.paintComponent(g);
        setBackground(Color.WHITE);
        car.teken(g);
    }
}

 class Car {
    public ArrayList<Part> parts;

    public Car( int left, int under, int width, int height){
        parts = new ArrayList<Part>();
        int wielgrootte = 20;
        //int carosOnder = onder - wielgrootte / 2;

        //de carosserie
        parts.add( new Rectangle( Color.BLUE, left, under - 10, width, height ) );

        // De cabine
        parts.add( new Rectangle( Color.CYAN, left, under - 10 - height, 4 * width / 5, 4 * height / 5 ) );

        // het achterwiel
        parts.add( new Circle( Color.YELLOW, left + 5, under, wielgrootte) );

        // het voorwiel
        parts.add( new Circle( Color.YELLOW, left + width - 30, under, wielgrootte ) );
    }

    public void teken( Graphics g ){
        for(Part part : parts){
            part.teken( g );  //polymorfie says my book
        }
    }

    public interface Part {
        public void teken( Graphics g ); //abstract method says my book
    }

    public class Rectangle implements Part {
        public int left, under, width, height;
        public Color color;

        public Rectangle (Color color, int left, int under, int width, int height){
            this.color = color;
            this.left = left;
            this.under = under;
            this.width = width;
            this.height = height;
        }

        public void teken ( Graphics g ){
            g.setColor( color );
            g.fillRect(left, under - height, width, height);
            g.setColor(Color.black);
            g.drawRect(left, under - height, width, height);
        }
    }

    public class Circle implements Part {
        public int left, under, diameter;
        public Color color;

        public Circle( Color color, int left, int under, int diameter ){
            this.color = color;
            this.left = left;
            this.under = under;
            this.diameter = diameter;
        }

        public void teken( Graphics g ){
            g.setColor(color);
            g.fillOval(left, under - diameter, diameter, diameter);
            g.setColor(Color.black);
            g.drawOval(left, under - diameter, diameter, diameter);
        }
    }
}

我的书说它必须工作,但 eclipse 说:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
  at Carpanel.paintComponent(Vb1101.java:26)
  at javax.swing.JComponent.paint(Unknown Source)
  at javax.swing.JComponent.paintChildren(Unknown Source)
  at javax.swing.JComponent.paint(Unknown Source)
  at javax.swing.JLayeredPane.paint(Unknown Source)
  etc...

我不明白为什么!?有人知道为什么代码会抛出异常吗?起初我在 eclipse 中看不到任何错误,但是当我运行时,问题就开始了。我确实有窗户,但没有车。

【问题讨论】:

    标签: java debugging exception paintcomponent


    【解决方案1】:

    Carpanel的构造函数中去掉void关键字,从而初始化car实例

    public void Carpanel() {
    

    应该是

    public Carpanel() {
    

    【讨论】:

    • 天哪,我意识到我现在是多么的笨拙。我的书有错误,我无法调试它们,因为我只知道 PHP,其中的类就像 45 公里汽车 vs 法拉利与 java 相比。嗯,谢谢你,它现在可以工作了!
    • 没问题,阅读构造函数here
    • 好的,谢谢!我会读那个。哇,像 php.net 这样的文档很方便!
    猜你喜欢
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2012-10-11
    • 2017-06-16
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多