Eclipse-Fehler od. Fehler im Code, was meint ihr?

gring0

Mitglied
Seid gegrüßt,

gleich vorweg, dies ist mein erster Beitrag und ich hoffe ich bin hier im richtigen Forum gelandet, falls nicht, wäre ich dankbar mich nicht gleich zu kreuzigen.

Im Prinzip bin ich noch ein Programmier-Frischling, da ich erst vor ein paar Monaten so richtig damit angefangen habe. Da ich den Code aber bereits mit einigen Leuten meines Vertrauens durchgegangen bin (diese haben definitv mehr Ahnung davon als ich), die keinen Fehler im Code selbst entdecken konnten, sind wir zu dem Schluss gekommen, dass es sich wohl um einen Eclipse-Fehler handeln muss. An dieser Stelle wollte ich einfach nachfragen, ob dieser Fehler bei irgendwem schoneinmal aufgetreten ist und falls ja, wie er - hoffentlich - behoben werden konnte.

Fehlermeldung:
"JDI-Threadauswertungen (Fehler: Beim Verarbeiten der Threadwarteschlange ist eine Ausnahmebedingung aufgetreten")"
Ich kann zwar trotz des Fehlers weiterlaufen im Debugger, allerdings stehe ich dann vor einem Problem, dass es eigentlich nicht geben dürfte. Denn ich ende mit einer NullPointerException auf einer Instanvariablen, die definitiv nicht null sein kann. Es sieht so aus, als ob er nach dem Aufruf einer gewissen Methode, die Instanzvariable einfach "verliert". Demnach ist meine Vermutung, dass es Aufgrund dieses Eclipse-Fehlers zu einem Fehler im Programm kommt.

Diese Meldung tritt jetzt aber nur im JDI also im JavaDebuggingInterface auf, starte ich das ganze normal (also nicht im debug-mode), habe ich diesen Fehler nicht, jedoch ende ich trotzdem mit der oben beschriebene NullPointerException.

Falls jemand dieses "Phänomen" kennt oder sogar eine Lösung dafür parat hat, wäre ich sehr dankbar.

*****edit*****
EclipseVersion: 3.0.1

mfg
gring0
 
Zuletzt bearbeitet:
Na dann erstmal: "Herzlich Willkommen!"
Keiner wird hier (grundlos) gekreuzigt. Ich denke, das Forum passt.

Wenn die NullPointerException, die mit Sicherheit nicht auftreten kann ;), auch bei normaler Programmausführung auftritt, kann ich mir nicht vorstellen, dass es sich um einen Eclipsefehler handelt.
Die vorangegangene Fehlermeldung scheint vom JDI zu kommen und muss daher nicht zwangsläufig auch in der normalen Programmausführung auftreten.
Wenn man mit Threads arbeitet ist es schon sehr gewagt, zu behaupten, etwas kann nicht null sein ;).
In Deinem Code muss nicht Zwangsläufig ein Fehler erkennbar sein, wenn man ihn "von Hand" Schritt für Schritt durchgeht. Durch Nebenläufigkeiten in Threads passieren die interessantesten Dinge.
Bei mir war bisher jeder vermeintliche Eclipse-Fehler auf den zurückzuführen, der vor dem Monitor sitzt und das war meistens ich selbst.
Zeige doch mal Deinen Code und beschreibe ein bisschen, was wo passieren soll.
Vielleicht fällt einem hier im Forum ja etwas auf.

Gruß hpvw

PS: Da Du neu bist, gleich ein Hinweis vorweg: Bitte verwende die Code-Tags [ code ] Dein Java-Code [ / code ], natürlich ohne Leerzeichen, wenn Du Deinen Quelltext postest.
 
gut, also ich versuchs mal so einfach wie möglich zu erklären, wobei das ganze eine - meiner Meinung nach - äußerste verzwickte geschichte ist... noch dazu handelt es sich hier um eine Programm-Anpassung u. den source-code kann/soll/darf ich nur ausschnittsweise herzeigen.

Es handelt sich um ein Programm das eine Liste erzeugt, In die vorher definierten Spalten sollen dann gewisse Felder eingehängt werden mit gewissen Werten.

Bevor der ganze unten beschriebene Programmablauf passiert, wird eine Variable (=x) die per KonstruktorAufruf mitgeschickt wird im Konstruktor in eine InstanzVariable (=meinX) zwischengespeichert.
Code:
 this.meinX = x;

Zum Aufbau
(der Einfachheithalber verwende ich für meine erstellten Klassen "Meine" als pre-Name)

die Hauptklasse:
MeineKalkulationsListe,
diese beinhaltet 2 innere Klassen:
1. MeineAbstrakteSicht (heißt nicht nur so, ist auch tatsächlich abstract)
2. MeineKalkulationsSicht

Vererbung:
MeineKalkulationsListe erbt von StandardKalkulationsListe
MeineAbstrakteSicht erbt von StandardAbstrakteSicht
MeineKalkulationsSicht erbt von MeineAbstrakteSicht

Um jetzt andere Felder in die Spalten einzuhängen muss ich die vorhande Methode "addFields()" überschreiben und meine Felder statt den bisherigen eintragen.

der Einstieg erfolgt über eine Methode in der Hauptklasse:
Code:
createView(...) {...}
diese ruft
Code:
new MeineKalkulationsSicht()
auf, die wiederum in ihrem Konstruktor den super-Konstruktor (MeineAbstrakteSicht) aufruft.

*schwitz* weitergehts...

der Konstruktor von MeineAbstrakteSicht führt ebenfalls den super-Konstruktor aus (StandardAbstrakteSicht)

in diesem Konstruktor findet sich folgender Code
Code:
   super(style, layout);
            this.level = level;
            this.list = list;
            init();

die init() beinhaltet genau einen Methoden-Aufruf:
Code:
 addFields()

und da diese von mir überschrieben wird, würde addFields() von MeineAbstrakteSicht aufgerufen werden, aber da die klasse abstrakt ist führt er zuerst die addFields() von MeineKalkulationsSicht(), die aber wiederum super.addFields() aufruft.

*schwitz*
wer bis hierher gekommen ist - meine Hochachtung - schafft den endspurt hoffentlich auch noch...

endlich das Ziel ist nah.. wir sind in der addFields() methode in der Klasse MeineAbstrakteSicht

hier findet sich u.a. folgender Code:
Code:
           totalCost = new DomesticAmountField("abc","xyz", meinX.getXY()
                                view.add(totalCost, "7");

jo, das wars, die letzte zeile die er ausführt, denn meinX ist null(bzw. einfach weg ?) und somit funktioniert auch kein Aufruf darauf.

wer sich jetzt alles durchgelesen hat, wird gemerkt haben:

1. meinX wird einmal befüllt
2. meinX wird nie geleert
3. meinX geht trotzdem flöten (alle möglichen abgerbten Klassen kennen meinX nicht und können demnach nicht dafür verantwortlich sein)

meiner Meinung nach ein Eclipse-Phänomen, was sich nicht erklären lässt, ich werde aber gerne eines besseren belehrt.

nachwort: den aufbau habe ich nicht verbrochen, der ist mehr oder weniger vorgabe

mfg
gring0, schwitzend
 
Zuletzt bearbeitet:
Hallo!

Wie wär's denn, wenn du erstmal analysierst wo in deinem Ablauf überall Schreibzugriffe auf diese meinX Membervariable vorgenommen werden. Weiterhin könntest du dir im Eclipse Debugger auch eine "Watch" auf meinX anlegen mit der du Veränderungen an meinX mitbekommen kannst. Denke, dass ganze ist ein Problem in deinem Ablauf. Weiterhin kann man mit den wenigen Codeschnippseln leider nicht so viel anfangen.

Gruß Tom
 
Ist denn wirklich meinX==null? Oder ist etwas, worauf die Methode Methode getXY zugreift null. Ist vielleicht bereits das zugewiesene x null?
Du könntest uns mal die gesamte NullPointerException inklusive Stacktrace posten. Vielleicht ergibt sich daraus ja etwas.

Habe ich es überlesen oder hast Du nicht gesagt, welchen Typ meinX hat?

Ich bemühe mal wieder meine in die Jahre gekommene Glaskugel:
Hast Du evtl. meinX sowohl in einer Super-, als auch in einer Subklasse als private definiert? Dann könnte es durchaus sein, dass Du die "falsche" Variable mit x belegst.

Gruß hpvw

PS: Solltest Du eine Lösung gefunden haben, dann teile sie bitte mit, damit wir wieder ruhig schlafen können ;)
 
eines vorweg: ich habe bis jetzt keine Lösung/Erklärung gefunden

eine Erkenntnis weiter bin ich aber dennoch gekommen und zwar:

der im ersten Posting beschriebene JDI-Fehler kommt nur dann zustande, wenn ich das hier tue:
Weiterhin könntest du dir im Eclipse Debugger auch eine "Watch" auf meinX anlegen mit der du Veränderungen an meinX mitbekommen kannst.
und zwar genau in dem Moment in dem er in den Konstruktor von MeineKalkulationsSicht einsteigt

zu den Fragen/Vorschlägen:
1. auf meinX gibt es keine Schreibzugriffe sondern nur Lesezugriffe
2. das zugewiesene X ist nicht null, da steckt ein Objekt drin
3. meinX ist nur in meiner Klasse definiert, ist private und überlappt/überschreibt sich mit keiner anderen Variablen der super-Klassen

weiters, ist meinX nicht wirklich null, also wenn ich vor der Zeile in der die NullPointer auftritt im Debugger stehenbleibe und meinX auswerten will (z.B. per Untersuchen), bekomme ich keinen Wert zurück. Weder null noch einen konkreten Wert einfach "gar nichts"

mfg
gring0, ratlos
 
habe die Probleme jetzt durch Einbau in den originalen Sourcecode umgangen.

also braucht jetzt niemand mehr darüber nachdenken, danke an die, die's trotzdem versucht haben :)
 
Zurück