Frage

ANTWORT:

Wenn Sie jemals diese Zeilen sehen und sind mistified wie ich war, ist hier, was sie bedeuten.

Thread[AWT-EventQueue-0] (Suspended (exception NullPointerException))

EventDispatchTread.run() line: not available [local variables unavailable]

Es ist nicht, dass die Variablen nicht verfügbar sind, weil sie hinter einem Schleier des Geheimnisses in einer Bibliothek irgendwo feucht lauern. Nein, nein, sie gingen nur aus Rahmen! Es ist immer noch deine Schuld, Sie haben immer noch die Null zu finden, und nicht Sie können die Bibliothek nicht schuld. Wichtige Lektion!

FRAGE:

Einer der frustrierenden Dinge für mich als Anfänger Bibliotheken sind! Es ist eine Liebe / Hass-Beziehung: Zum einen lassen sie mich Dinge tun, würde ich normalerweise nicht verstehen, wie mit dem Code zu tun, das verstehe ich, auf der anderen Seite, weil ich sie nicht ganz verstehen, sie manchmal werfen Schraubenschlüssel in Code, der sonst funktioniert gut! Es ist, weil ich nicht verstehe, die Fehler, die auftreten können, wenn diese Bibliotheken verwenden, weil ich sie nicht schreiben, und weil Eclipse mich nicht viel geben, mit zu gehen, wenn man der Importe beginnt schneller auf ...

Hier ist also das Problem: Ich habe mit java.awt.event gearbeitet, um eine Reihe von JButtons auf dem Bildschirm für dies und das zu handhaben. Ich erhalte eine Fehlermeldung, wenn ich auf eine der Schaltflächen verwenden ich gemacht habe. Der Fehler ist:

Thread[AWT-EventQueue-0] (Suspended (exception NullPointerException))

EventDispatchTread.run() line: not available [local variables unavailable]

Was bedeutet das? Was könnte es sein, was? Es ist mir peinlich Code zu schreiben, aber wenn man stehen kann, um zu versuchen meine schreckliche Art zu entziffern, hier ist die Methode, die dieser Fehler ausgelöst werden, zu verursachen scheint.

public void actionPerformed(ActionEvent e) {
    String cmd = e.getActionCommand();
    String name;

code...

if(cmd.equals("Play")) {
        name = field.getText();
        card = getCard(name);

        if(card != null) {
            if(rules.zoneHasCard(card, rules.hand)) {
                display.updateStatusMessage(rules.play(card));
                field.setText("");
                display.updateHand(rules.zoneList("hand"));
                display.updateDiscard(rules.zoneList("Discard")); // This is the error here! The discard Zone was empty!
            }
            else {
                field.setText("You do not have " + card.getName());
                field.selectAll();
            }
        }
        else {
            field.setText("That cardname is unused");
            field.selectAll();
        }
    }
}
War es hilfreich?

Lösung

Willkommen in der Komplexität der GUI Code zu schreiben.

Wenn Sie ein Swing-Programm ausführen, eine so genannte Hintergrundthread das Event Dispatch Thread erstellt wird. Wenn der Benutzer auf einem JButton klickt, zum Beispiel schafft JButton und feuert ein Ereignis dieses Event Dispatch Thread verwenden. Daher auch der Name: das ist der rote Faden, Ereignisse

Versendungen

Ihr Code:

public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        String name;

// more code...
}

wird von diesem Event Dispatch Thread genannt, so dass Ihr Code kann das Ereignis behandeln.

Irgendwo im Code Sie versuchen, etwas mit einer Variablen zu tun, die zur Zeit gleich null. Die Fehlermeldung sagt Ihnen, "hey, während einige Code auf dem Thread Event Dispatch ausgeführt wird, ich stieß auf eine Nullpointer" in Ihrem Code .

Warum erhalten Sie nicht mehr Informationen? Möglicherweise konfigurierten Eclipse-nicht Debug-Informationen enthalten beim Kompilieren?

Im Moment empfehle ich das Hinzufügen einiger Zeilen zu Ihrer Methode actionPerformed den Zustand von Variablen zu zeigen:

System.out.println("field = " + field);
System.out.println("rules = " + rules);
System.out.println("display = " + display);

Sehen Sie, wenn dies zeigt Ihnen alle NULL-Werte.

Auch wenn die Nullpointer aus einer Bibliothek kommt, wird der Stack-Trace zeigen, welche Zeile des Codes, dass Bibliothek aufgerufen. Aber nur, wenn Sie von Eclipse konfiguriert haben zu generieren Info debuggen.

Auf längere Sicht, Arbeit durch das Swing-Tutorial von Sun mehr über diese Themen zu erfahren.

Andere Tipps

Jeder Methodenaufruf auf einem Null-Objekt wird eine Null-Zeiger-Ausnahme ausgelöst.

In Ihrem Code, Regeln, Name oder die Anzeige könnte null sein und eine Ausnahme verursachen.

Verwenden Sie einen Debugger (wie der in der Eclipse-IDE enthalten) und einen Haltepunkt zu Beginn der Methode actionPerformed (), dann durch sie Schritt Zeile für Zeile, um zu sehen, wenn eine Variable, die Sie versuchen, eine Methode auf aufzurufen ist null.

Nur nicht aufhören, den Stack-Trace nach zwei Zeilen zu lesen. Irgendwo in dem Stack-Trace werden Sie den Namen einer der Klassen / Methoden erkennen, die Sie geschrieben haben. Starten Sie dort suchen. (Btw, die Menschen verbringen viel zu viel Zeit in Debugger: -))

Sie vergessen haben könnten, um einen Actioncommand tatsächlich eingestellt.

In der Action API Doc gibt es eine Notiz bezüglich mögliche null Ergebnisse getActionCommand ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top