Verzweifeln mit NPE

Luk10

Top Contributor
Hallo,

Ich hab schon seit einiger Zeit eine NPE in meine Programm ...
Zwei Dinge sind mir dabei unerklärlich:

1. Die Excetion tritt NICHT regelmäßig auf ... (wenn, dann nur bei einer Methode):
Ich verwende für diese Programm BlueJ, da wir das in der Schule verwenden müssen ...
(Vielleicht hat es ja damit etwas zu tun)
Folgendes Beispiel:
Ich starte BlueJ, öffne mein Projekt rufe die main() auf: keine Exception, Programm läuft flüssig. dann schließe ich BlueJ wieder, öffne es ein weiteres mal, öffne das Projekt, rufe main() auf: NPE

2. Ich kann mir nicht erklären WIESO das eine NPE auslöst:
Grober Code:

Java:
public void initialisieren () {
  getSingelton().belegtEinArray();
  greifeAufEbenDiesesArrayZu(); //Return das Array / Hier bekomme ich 'null' angezeigt
}

Das Array wurde richtig initialisiert belegt ... kann mir das nicht erklären :noe:
Vielleicht liegt es auch an diesem blödem BlueJ, hab aber hier in der Schule grad nichts anderes ...

So long, Luk
 
T

Tomate_Salat

Gast
wie wäre es wenn du mal [c]greifeAufEbenDiesesArrayZu();[/c] posten würdest ?! Nach 195 Einträgen sollte man mitbekommen haben, dass wir nicht hellsehen könne ;-)

Jaja, immer die Schuld auf die IDE schieben ;-)
 

Suinos

Bekanntes Mitglied
Könnte an Threads liegen, wenn ihr die schon behandelt habt und jetzt einsetzt.

Teste das Programm doch über die Konsole, das geht immer.
 

fastjack

Top Contributor
Poste mal mehr Code! Es kann an mehreren Sachen liegen, z.B. daran, das euer Singleton falsch implementiert wurde und dadurch Synchronisationsstreß hat und und und ...
 

Luk10

Top Contributor
So tut mir Leid, hier sind Codeausschnitte ... sollte dass immer noch keine Klarheit bringen, kann ich gerne auch ganze Klasse posten.

Java:
private Feld[] alleFelder;

    public static Verwalter getVerwalter () {
        if (verwalter == null) {
            verwalter = new Verwalter();
            return verwalter;
        }
        return verwalter;
    }

    public void erstelleFelder() {
        if (panel != null && verwalter != null) {
            int zaehler = 0;
            
            alleFelder = new Feld[(panel.getBreite()/panel.getEinFeld()*
            panel.getBreite()/panel.getEinFeld())];
            
            for (int i = 0; i < (panel.getBreite()/panel.getEinFeld()*
            panel.getHoehe()/panel.getEinFeld());
            i = i + panel.getEinFeld()) {
               
                for (int j = 0; j < (panel.getBreite()/panel.getEinFeld()*
                panel.getHoehe()/panel.getEinFeld());
                j = j + panel.getEinFeld()) { 
                    alleFelder[zaehler] = new Feld(zaehler, j, i);
                    zaehler++;
                }
            }
        }

    public Feld[] getAlleFelder() {
        return alleFelder;
    }

aufgerufen wir es in:

Java:
public void initialisieren () {
    Verwalter.getVerwalter().getGamepanel(this);
    Verwalter.getVerwalter().erstelleFelder();
    Verwalter.getVerwalter().getAlleFelder();
}

Luk

Edit: Zu diesem Zeitpunkt gibt es nur den main-Thread
 
Zuletzt bearbeitet:

Momolin

Aktives Mitglied
Hallo,
ich vermute auch ein Thread Problem:

Java:
    public void erstelleFelder() {
        /*wenn das panel null ist, gibt es kein Feld != null*/
        if (panel != null && verwalter != null) {
           [...]
        }

aufgerufen wir es in:

Java:
public void initialisieren () {
    Verwalter.getVerwalter().getGamepanel(this);
    /*hier ist ja sicher ausgeschlossen, dass der Verwalter null ist,
        aber wie sicher kannst Du sein, dass das panel != null ist?*/
    Verwalter.getVerwalter().erstelleFelder();
    /*wenn das panel == null war, gibt es hier kein Feld != null*/
    Verwalter.getVerwalter().getAlleFelder();
}

bei mehreren Threads kann man nicht sicher sein, wann welcher ausgeführt wird. Und bei einer grafischen Oberfläche hast Du immer mehrere Threads, mindestens den main und den EventThread.


Viele Grüße
Momolin
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben