2016-04-14 11 views
0

Ich bin mir nicht sicher warum, aber in meiner paintComponent-Methode, die fillOval-Funktion lässt mich nicht meine anderen Klassen Koordinaten übergeben. Es kommt mit:fillOval() nimmt keine Klassenvariablen?

'Exception in thread "AWT-Eventqueue-0" java.lang.NullPointerException'

alle Rechtecke zeichnen in Ordnung, aber nicht nur das Oval. Hier ist die paintComponent() -Methode.

 public void paintComponent(Graphics graphics){ 
    graphics.setColor(Color.BLACK); 
    graphics.fillRect(0,0,600,450); 

    graphics.setColor(Color.WHITE); 
    graphics.fillRect(290,0,15,450); 
    graphics.fillRect(leftPaddle.getXPos(),leftPaddle.getYPos(),10,85); 
    graphics.fillRect(rightPaddle.getXPos(),rightPaddle.getYPos(),10,85); 
    graphics.fillOval(ball.getxPos(),ball.getyPos(),ball.getWidth(),ball.getHeight()); 
} 

Und hier ist meine Ball-Klasse (die Klasse, die die Koordinaten trägt).

public class Ball { 
int xPos = 140; 
int yPos = 50; 
int width = 15; 
int height = 15; 

public int getWidth() { 
    return width; 
} 

public int getxPos() { 
    return xPos; 
} 

public int getyPos() { 
    return yPos; 
} 

public int getHeight() { 
    return height; 
} 

}

Dies ist wahrscheinlich eine ganz einfache Lösung, aber ich bin relativ neu in Java, so entschuldige Formatierungsfehler usw.

Hier ist, wo ich das Objekt aus der Mainclass :

public class PaintComponents extends JPanel{ 
Paddle leftPaddle; 
Paddle rightPaddle; 
Ball ball; 

public PaintComponents(Paddle leftPaddle, Paddle rightPaddle, Ball ball) { 
    this.leftPaddle = leftPaddle; 
    this.rightPaddle = rightPaddle; 
    this.ball = ball; 
} 

Antwort

0

Wie der Darstellung Nullpointer Sie vielleicht nicht das Objekt "Ball" Ball der Klasse erstellt haben Hinzufügen versuchen:

Ball ball=new Ball(); 

in public void paintComponent(Graphics graphics)

vor "Ball" mit.

+0

Vielen Dank, du bist ein Lebensretter! Ja, ich sehe es jetzt, danke! –

0

ich nicht sehen, wo hast du die ball bekommen. So

  1. Sie können die Kugel Klasse wie Ball ball = new ball() instanziiert, bevor die fillOval() passieren. Oder
  2. Sie können alle Felder und Methoden als static markieren und dann stattdessen Ball.getSth() verwenden.
+0

Ja Ran, tut mir leid, ich habe das nicht da drin, ja, ich habe Ball Ball = new Ball(); aber es funktioniert immer noch nicht. –

+0

oops. es sollte "Ball ball = new Ball()" sein. mein Fehler. – Ran0990BK

+0

haha ​​mach dir keine Sorgen Ran, ich wusste was du meinst! –