BlueJ - Breite des Bildschirms

abfdx

Aktives Mitglied
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
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;
        }
        
    }

}
2. Waggon
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);
            }
        }
    }
}
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!
 

mihe7

Top Contributor
Naja, im Konstruktor von Waggon schreibst Du kenntB = pB, dabei ist pB ein Feld der Klasse, das nicht gesetzt wurde und daher null ist.
 

abfdx

Aktives Mitglied
Definiert in den einzelnen Waggons, also sollten die Parameter auch an die Oberklasse weitergegeben werden.
Java:
import sum.kern.*;
/**
 * @author
 * @version
 */
public class Lok extends Waggon
{
    // Objekte
    

    // Konstruktor
    public Lok(Bildschirm pB,int hPos,int vPos)
    {
        
        meinStift.bewegeBis(hPos,vPos);
        zeichne();
    }

    // Dienste
    public void zeichne()
    {
        double xh = meinStift.hPosition();
        double xv = meinStift.vPosition();
        meinStift.runter();
        meinStift.zeichneRechteck(20, 10);
        
        meinStift.runter();
        meinStift.dreheUm(-90);
        meinStift.bewegeUm(10);
        meinStift.dreheUm(90);
        meinStift.zeichneRechteck(50, 20);
        
        meinStift.bewegeUm(1);
        meinStift.hoch();
        meinStift.bewegeUm(18);
        
        
        meinStift.bewegeUm(-19);
        meinStift.bewegeUm(8);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(8);
        meinStift.runter();
        meinStift.dreheUm(-90);
        meinStift.zeichneRechteck(10, 12);
        meinStift.hoch();
        meinStift.bewegeUm(-8);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(2);
        meinStift.dreheUm(-90);
        meinStift.bewegeUm(7);
        meinStift.dreheUm(-90);
        meinStift.bewegeUm(37);
        meinStift.runter();
        meinStift.zeichneKreis(7);
        meinStift.hoch();
        meinStift.dreheUm(90);
        meinStift.bewegeUm(36);
        meinStift.zeichneKreis(7);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(27);
        meinStift.runter();
        meinStift.bewegeUm(8);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(4);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(8);
        meinStift.hoch();
        meinStift.dreheUm(180);
        meinStift.bewegeUm(14);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(4);
        meinStift.zeichneKreis(5);
        meinStift.dreheUm(-90);
        meinStift.bewegeUm(6);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(5);
        meinStift.zeichneKreis(4);
        meinStift.dreheUm(-90);
        meinStift.bewegeUm(5);
        meinStift.dreheUm(90);
        meinStift.bewegeUm(4);
        meinStift.zeichneKreis(2);
        meinStift.hoch();
        meinStift.dreheBis(0);
        meinStift.bewegeBis(xh, xv);
    }
}
 

mihe7

Top Contributor
Definiert in den einzelnen Waggons, also sollten die Parameter auch an die Oberklasse weitergegeben werden.
Nein. Wenn Du Parameter des Konstruktors an den Konstruktor der Superklasse weitergeben willst, musst Du diesen explizit mit super(...) aufrufen, ansonsten wird der Defaultkonstruktor verwendet.

Du brauchst also in Wagon einen Konstruktor mit einem Bildschirmparameter und in Lok musst Du dann super(pB) aufrufen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K BlueJ - Fragen zu dem Spiel Pacman (Nachprogrammieren) Allgemeine Java-Themen 141
N BlueJ Implementation einer Analoguhr Allgemeine Java-Themen 0
G BlueJ Hintergrund Allgemeine Java-Themen 10
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
P BlueJ BlueJ Gloop City Projekt Allgemeine Java-Themen 0
F BlueJ Java/Bluej Bug oder einfach nur Dummheit?? Allgemeine Java-Themen 5
H BlueJ Gloop Allgemeine Java-Themen 1
A BlueJ Java Frame Java Editor --> Bluej / String title Allgemeine Java-Themen 8
D JAVA;BlUEJ Allgemeine Java-Themen 9
H BlueJ Zustände verwalten Allgemeine Java-Themen 2
D BlueJ - Aufgabe 12 namens Traktor Allgemeine Java-Themen 7
P wieso kann ich auf bluej exportieren aber auf eclipse nicht? Allgemeine Java-Themen 2
L BlueJ Java/Bluej Windows7 Allgemeine Java-Themen 4
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
H BlueJ Klasse ZEICHENFENSTER in BlueJ Allgemeine Java-Themen 5
S BlueJ BlueJ - Geldautomat-Programmierung Allgemeine Java-Themen 2
K BlueJ: .jar Problem Allgemeine Java-Themen 2
G Anrufparameter für Applikationen in BlueJ Allgemeine Java-Themen 2
A BlueJ,Java, Exponentzechen! Allgemeine Java-Themen 12
F Kasiski-Test in BlueJ Allgemeine Java-Themen 4
B Problem mit Sortieralgorithmus (BlueJ) Allgemeine Java-Themen 2
kodela Breite eines erweiterten Monitors feststellen Allgemeine Java-Themen 5
kodela JHelp - Breite des Navigationsbereiches Allgemeine Java-Themen 5
JG12111989 FileInputStream - Breite einer bmp-Datei?? Allgemeine Java-Themen 8
Eldorado Barcodes mit statischer Breite generieren Allgemeine Java-Themen 3
X FontMetrics - Negative Breite/Höhe bei großer Schrift Allgemeine Java-Themen 6
O breite des inhalts eines jeditorpane Allgemeine Java-Themen 2
B Breite/Abstand Allgemeine Java-Themen 8
D JAI Verliere Bildinformationen (Höhe, und Breite) Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben