J
JonasT
Gast
Guten Tag,
Ich bin dabei ein kleines Programm zu schreiben bei dem sich Kreise (Bälle) auf einer Zeichenfläche (Canvas) bewegen sollen. Hierzu habe ich ein entsprechedes Programm mit mehreren Klassen geschrieben.
Leider bekomme ich nun folgende Fehlermeldungen:
Exception in thread "main" java.lang.NullPointerException
at java.awt.Canvas.paint(Unknown Source)
at objekt.Zeichnen.<init>(Zeichnen.java:18)
at objekt.Main.<init>(Main.java:41)
at objekt.Main.main(Main.java:46)
Über Google habe ich bereits heraus gefunden, dass ich wohl ein Objekt verwende welches NULL ist, jedoch weis ich nicht wo dies passiert und wie ich den Fehler beheben kann.
Offensichtlich ist es ein Problem mit den Klassen Main und Zeichnen, daher hier der Code:
Schon vorab vielen dank für eure Hilfe!
Ich bin dabei ein kleines Programm zu schreiben bei dem sich Kreise (Bälle) auf einer Zeichenfläche (Canvas) bewegen sollen. Hierzu habe ich ein entsprechedes Programm mit mehreren Klassen geschrieben.
Leider bekomme ich nun folgende Fehlermeldungen:
Exception in thread "main" java.lang.NullPointerException
at java.awt.Canvas.paint(Unknown Source)
at objekt.Zeichnen.<init>(Zeichnen.java:18)
at objekt.Main.<init>(Main.java:41)
at objekt.Main.main(Main.java:46)
Über Google habe ich bereits heraus gefunden, dass ich wohl ein Objekt verwende welches NULL ist, jedoch weis ich nicht wo dies passiert und wie ich den Fehler beheben kann.
Offensichtlich ist es ein Problem mit den Klassen Main und Zeichnen, daher hier der Code:
Java:
package objekt;
import java.awt.Canvas;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
@SuppressWarnings("serial")
public class Main extends Frame{
Schatten schatten=new Schatten();
Configuration config=new Configuration();
Objekt[] objekt=new Objekt[config.getAnzahlObjekte()];
Kollission kollission;
Zeichnen zeichnen;
Canvas canvas;
public Main(){
//Sichtbare Oberfläche erstellen
super("Java Programm");
Panel cp = new Panel(null);
cp.setBounds(0, 0, config.getBreiteZeichenflaeche(), config.getHoeheZeichenflaeche());
add(cp);
canvas = new Canvas();
canvas.setBounds(0,0,config.getBreiteZeichenflaeche(),config.getHoeheZeichenflaeche());
cp.add(canvas);
//Schließen des Programmsermöglichen
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) { System.exit(0); }
});
//Objekte erzeugen
for (int i=0;i<config.getAnzahlObjekte();i++){
objekt[i]=new Objekt(config,schatten,this);
objekt[i].start();
}
//Kollissionstest starten
kollission=new Kollission(objekt,config);
kollission.start();
//Zeichnen starten
zeichnen=new Zeichnen(canvas,objekt,config);
zeichnen.start();
}
public static void main(String[] args) {
new Main();
}
public void checkPosition(int x, int y, int r, int dx, int dy){
//Hier der Test auf Kollission und der Painter aufruf.
}
}
Java:
package objekt;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
public class Zeichnen extends Thread {
Graphics g;
Objekt[] objekte;
Configuration config;
Canvas canvas=new Canvas();
public Zeichnen(Canvas canvas, Objekt[] objekte, Configuration config){
this.config=config;
this.objekte=new Objekt[config.getAnzahlObjekte()];
this.canvas=canvas;
this.canvas.paint(g);
}
public void anzeigen(){
int i=0;
g.setColor(Color.white);
g.fillRect(0, 0, config.getBreiteZeichenflaeche(), config.getHoeheZeichenflaeche());
while (i<config.getAnzahlObjekte()){
g.setColor(objekte[i].getFarbe());
g.fillOval(objekte[i].getX()-objekte[i].getR(), objekte[i].getY()-objekte[i].getR(), 2*objekte[i].getR(), 2*objekte[i].getR());
i++;
}
canvas.repaint();
}
public void start(){
anzeigen();
}
public void run(){
while(isInterrupted() == false){
anzeigen();
try {
sleep(20);
}
catch(InterruptedException e){
return;
}
}
}
}
Schon vorab vielen dank für eure Hilfe!