2 Stimmen

JavaScript-Ausnahmen bei kompiliertem GWT-Code

Während der Kompilierung einer GWT-Klasse bekam ich eine Compiler-Ausnahme. Ich habe einen Fehlerbericht dafür hier eingereicht: http://code.google.com/p/google-web-toolkit/issues/detail?id=6623

Jetzt habe ich herausgefunden, wie ich es trotzdem kompilieren kann, indem ich "draftCompile" verwende. Allerdings funktioniert der generierte JavaScript-Code bei der Ausführung nicht.

Die Java-Quelldateien sind im Bug-Tracker verfügbar, und das kompilierte Projekt finden Sie hier: http://clientssh1.rbg.informatik.tu-darmstadt.de:9000/war/Gwittest.html

Der Fehler lautet: (Chrome) "Uncaught TypeError: Cannot read property 'testpackage_shared_ship_Level_boards' of null". In Firefox ist es ein anderer Fehler.

Der Code funktioniert im Entwicklungsmodus (von Eclipse).

Wie kann ich diesen Fehler umgehen? Hängt er mit dem Kompilierungs-/Optimierungsfehler zusammen? Wie kann ich ihn umgehen? Wenn es sich um einen Fehler an sich handelt, sollte ich diesen auch melden, oder?

Edit: Die betreffende Klasse befindet sich hier: https://gist.github.com/1139147

0 Stimmen

Ich kann nur raten, es mit -style PRETTY zu kompilieren und zu versuchen, das Problem zu finden. Ich hatte kürzlich ein Problem mit den gleichen Symptomen ( code.google.com/p/google-web-toolkit/issues/detail?id=6579 ), der einzige Weg, wie es zu lösen, ist zu vergleichen, kompiliert Js vs. Java-Quellcode, um herauszufinden, wo Compiler vermasselt (btw, wenn ich versucht, Ihre app in neuesten Firefox zeigte es eine ganz andere Fehler [17:35:46.422] this$static ist null @ clientssh1.rbg.informatik.tu-darmstadt.de:9000/war/gwittest/ )

2voto

JGWeissman Punkte 708

Der Fehler klingt wie das kompilierte Javascript enthält Code wie:

null.testpackage_shared_ship_Level_boards

Dies würde passieren, wenn der GWT-Optimierer glaubt, dass Ihre Variable vom Typ "Level", deren Feld "boards" gelesen wird, null sein muss. Der Optimierer hat in der Regel Recht damit.

Ein Ansatz besteht also darin: Kompilieren Sie den Code in menschenlesbares Javascript (-style pretty). Holen Sie sich die Javascript-Fehler und finden Sie die Zeile, die es verursacht. Finden Sie die entsprechende Zeile in Ihrem Java-Quelltext, und verfolgen Sie zurück, woher der Wert Ihrer Variablen kommt. Sie werden wahrscheinlich feststellen, dass die Variable nicht initialisiert wurde.

0 Stimmen

Sie ist bereits für Menschen lesbar. Sie können den Quelltext im Fehlerbericht sehen. Der Optimierer ist deaktiviert. Er funktioniert im Entwicklungsmodus.

0 Stimmen

@user309483: Da Sie diese Antwort akzeptiert haben und ich nicht sehen kann, wie sie helfen könnte, könnten Sie beschreiben, wie Sie das Problem in Ihrem Fall gefunden haben?

0 Stimmen

@Paulo: Nun, ich denke, es war ein GWT-Compiler-Bug. Ich habe das Problem gelöst, indem ich mehr Code serverseitig ausgeführt habe (d.h. nicht GWT-kompiliert)... Diese Antwort zeigt, dass ich mir Mühe gegeben habe, und ich akzeptiere sie, weil sie meinen Verdacht bestätigt, dass der GWT-Compiler Probleme hat. Außerdem wollte ich meine Akzeptanzquote nicht zu niedrig ansetzen, da ich denke, dass dies die Leute davon abhalten wird, meine Fragen zu beantworten. Entschuldigung. Beachten Sie, dass ich dieses Problem mit GWT 2.3.0 hatte, vielleicht haben sie die Ursache behoben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X