# Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException



## Stefan S. (21. Mrz 2009)

Hallo,

ich habe ein nerviges Problem unter Netbeans. Ich bekomme ständig eine NullPointerException, obwohl das Objekt eigentlich nicht null sein dürfte.

Im Konstruktor von Klasse A weise ich dem Member view die Instanz eines neuen JFrames zu. Testweise habe ich gleich danach das Objekt auf null getestet. Zu diesem Zeitpunkt ist alles in Ordnung.

[highlight=Java]class A
{
    A()
    {
        view = new B(this);

        // view ist nicht null
    }

    public void method()
    {
        view.hello();    // hier ist view plötzlich null
    }

    private JFrame view;
}[/highlight]

Anschließend erfolgt ein Methodenaufruf der Klasse A aus der JFrame Klasse, bei dem erneut das Objekt view auf null getestet wird. 

[highlight=Java]class B
{
    B(A obj)
    {
        obj.method();
    }

    public void hello()
    {
        System.out.print("Hallo");    
    }
}[/highlight]

Unerklärlicherweise ist das Objekt nun null?! Alle anderen Member der Klasse A sind aber instanziert.

Ich habe keine Erklärung dafür. :autsch:


----------



## Wildcard (21. Mrz 2009)

Benutz den Debugger, oder zur Not System.outs, ohne Code lässt sich dazu nichts sagen.


----------



## Stefan S. (21. Mrz 2009)

Wildcard hat gesagt.:


> Benutz den Debugger, oder zur Not System.outs, ohne Code lässt sich dazu nichts sagen.



Hab den Prinzipcode oben nachgetragen!


----------



## Stefan S. (21. Mrz 2009)

Wenn ich in Klasse B einen java.awt.event.ActionListener hinzufüge und dann aus der Performed-Methode den folgenden Aufruf wiederhole.

[highlight=Java]obj.method();[/highlight]

ist das Objekt plötzlich nicht mehr null und die Ausgabe auf die javax.swing.JTextArea erfolgt ohne Probleme.

Ich nehme an das hängt irgendwie mit dem Aufbau der Objekte zusammen. Solange der Konstruktur von B nicht vollständig abgearbeitet wurde, kann ich aus Klasse A keine Methoden aus B aufrufen.

Dort ist dann das Objekt null. Interessant, ist einleuchtend, aber dennoch interessant! :toll:


----------



## Wildcard (21. Mrz 2009)

Da ist sicherlich nichts merkwürdiges dran, sondern ein einfach Tipp- Denkfehler, der sich allerdings von hier aus nicht nachvollziehen lässt- Ich rate nochmal zum Debugger.


----------



## Stefan S. (21. Mrz 2009)

Wildcard hat gesagt.:


> Da ist sicherlich nichts merkwürdiges dran, sondern ein einfach Tipp- Denkfehler, der sich allerdings von hier aus nicht nachvollziehen lässt- Ich rate nochmal zum Debugger.



Wie gesagt, ich nehme an das liegt am Aufbau der Objekte. Siehe Erklärung oben.


----------



## Wildcard (21. Mrz 2009)

Dein Beispiel enthält tatsächlich das Problem.
Schau einfach mal was du tust:
Du instanzierst B und landest damit im Konstruktor, der direkt deine Methode method aufruft. Die Variable view weist du allerdings erst zu, wenn B fertig instanziert ist. Daher ist 'view' an der Stelle natürlich noch null, der Konstruktor von B ist ja noch nicht durchgelaufen.


----------



## Stefan S. (21. Mrz 2009)

Wildcard hat gesagt.:


> Dein Beispiel enthält tatsächlich das Problem.
> Schau einfach mal was du tust:
> Du instanzierst B und landest damit im Konstruktor, der direkt deine Methode method aufruft. Die Variable view weist du allerdings erst zu, wenn B fertig instanziert ist. Daher ist 'view' an der Stelle natürlich noch null, der Konstruktor von B ist ja noch nicht durchgelaufen.



Richtig! Das ist mir aber erst jetzt aufgefallen, als ich es in meinem Beispielcode überblickte. 

Danke, Thema kann geschlossen werden. 

Gruß,
Stefan


----------

