彼は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);
}
}
}
私の本には、それが機能しなければならないと書かれていますが、日食は次のように述べています。
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でエラーは表示されませんが、実行すると問題が発生します。窓はありますが、車はありません。