Hallo, ich habe ein kleines Problem mit BlueJ. Es geht darum, dass ein Zug von rechts nach links auf dem Bildschirm fahren soll und wenn er den Bildschirm verlassen hat, wieder an den Anfang gesetzt wird.
Im Folgenden einmal die MainClass und die (abstrakte) Klasse Waggon:
1. MainClass
2. Waggon
Das Problem ist jetzt in Zeile 33 der Klasse Waggon (genauer gesagt bei der Frage nach der Bildschirmbreite). Beim Ausführen des Programms kommt nämlich eine NullPointerException raus, ich finde allerdings den Fehler nicht.
Schonmal Vielen Dank an Alle!
Im Folgenden einmal die MainClass und die (abstrakte) Klasse Waggon:
1. MainClass
Java:
import sum.kern.*;
public class MainClass
{
// Objekte
Bildschirm derBildschirm;
Stift meinStift;
waggonEINS w1;
waggonZWEI w2;
waggonDREI w3;
Lok w0;
Maus dieMaus;
Waggon irgendeinwaggon, W;
Tastatur kb;
// Konstruktor
public MainClass()
{
int AnzahlWaggons = 0;
derBildschirm = new Bildschirm(600,400);
dieMaus = new Maus();
kb = new Tastatur();
w0 = new Lok(derBildschirm, 410, 200);
AnzahlWaggons++;
w1 = new waggonEINS(derBildschirm, 355, 200);
AnzahlWaggons++;
w0.setzeNF(w1);
w2 = new waggonZWEI(derBildschirm, 300, 200);
AnzahlWaggons++;
w1.setzeNF(w2);
w3 = new waggonDREI(derBildschirm, 245, 200);
AnzahlWaggons++;
w2.setzeNF(w3);
irgendeinwaggon = w0;
while (!dieMaus.doppelKlick()){
while(irgendeinwaggon.kenntNF != null) {
irgendeinwaggon.bewege();
irgendeinwaggon = irgendeinwaggon.kenntNF;
}
irgendeinwaggon.bewege();
if(kb.wurdeGedrueckt()){
if(55 * AnzahlWaggons <= derBildschirm.breite()-55){
switch (kb.zeichen()){
case '0': W = new Lok(derBildschirm, -100, -100);
irgendeinwaggon.ankoppeln(W);
AnzahlWaggons++;
kb.weiter();
break;
case '1': W = new waggonEINS(derBildschirm, -100, -100);
irgendeinwaggon.ankoppeln(W);
AnzahlWaggons++;
kb.weiter();
break;
case '2': W = new waggonZWEI(derBildschirm, -100, -100);
irgendeinwaggon.ankoppeln(W);
AnzahlWaggons++;
kb.weiter();
break;
case '3': W = new waggonDREI(derBildschirm, -100, -100);
irgendeinwaggon.ankoppeln(W);
AnzahlWaggons++;
kb.weiter();
break;
case 'q': w0.abkoppeln();
AnzahlWaggons--;
kb.weiter();
break;
default:
kb.weiter();
break;
}
} else{
switch(kb.zeichen()){
case 'q': w0.abkoppeln();
AnzahlWaggons--;
kb.weiter();
break;
default:
kb.weiter();
break;
}
}
}
irgendeinwaggon = w0;
}
}
}
Java:
import sum.kern.*;
/**
* @author
* @version
*/
public abstract class Waggon
{
Stift meinStift;
Bildschirm kenntB, pB;
Waggon kenntNF;
Tastatur kb;
Waggon letzterWaggon;
// Konstruktor
public Waggon()
{
meinStift = new Stift();
kenntB = pB;
kb = new Tastatur();
}
public abstract void zeichne();
public void radiere(){
meinStift.radiere();
zeichne();
meinStift.normal();
}
public void bewege(){
if(meinStift.hPosition() >= pB.breite()){
//radiere();
//Auskommentiert, da der Zug sonst flackert.
meinStift.bewegeBis(-50, 200);
} else{
radiere();
meinStift.bewegeUm(1);
zeichne();
}
}
public void setzeNF(Waggon pNF){
kenntNF = pNF;
}
public void zuPos(double pH, double pV){
radiere();
meinStift.bewegeBis(pH,pV);
zeichne();
}
public void ankoppeln(Waggon ankop){
if(kenntNF != null)
{
kenntNF.ankoppeln(ankop);
}
else
{
ankop.zuPos(meinStift.hPosition()-55,meinStift.vPosition());
this.setzeNF(ankop);
}
}
public void abkoppeln(){
if(kenntNF != null){
if(kenntNF.kenntNF != null)
{
kenntNF.abkoppeln();
}
else
{
kenntNF.radiere();
this.setzeNF(null);
}
}
}
}
Schonmal Vielen Dank an Alle!