• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

UnsupportedOperationException

maierkurt

Geowizard
Mein System:
  • Windows Mobile 6.1
    EWE-Version 1.49
    CacheWolf Revision 1662 (kompiliert am 02.03.2009 um 20:18:12 Uhr), geladen von http://pub.naturalnet.de/~nik/cw-nightly.php
Alles komplett neu heruntergeladen und in einen neuen Ordner auf dem PDA kopiert.

Wie es begann: Nach längerer Zeit habe ich mich wieder mit Eclipse beschäftig und die neuesten Revisionen heruntergeladen und selbst compiliert.
Sobald aber die Entfernung zum Ziel unter 1000m fällt, reagiert der Goto-Tab nicht mehr oder nicht mehr richtig. Klicke ich auf z.B. auf den Button "Start GPS" (er ist vor dem Klick nicht sichtbar) erscheint er, die Kompassrose allerdings nicht.
Irgendwann kommt dann die Fehlermeldung
Code:
Exception Occured
java/lang/UnsupportedOperationException
Cannot convert

Stop the application?
<Ja>   <Nein>
Nach einem Klick auf "Ja" startet der PDA komplett neu.
Unter Eclipse kann ich dieses Problem nicht nachstellen, es läuft ohne Probleme.
Was mache ich falsch?


Gruß, maierkurt
 
OP
M

maierkurt

Geowizard
Von beiden.
Zuerst habe ich meinen eigenen Build (die exe-Datei) in meinen vorhandenen Ordner auf dem PDA kopiert.
Danach habe ich zum Test die oben angegebene NB samt datfile.zip heruntergeladen und in einen extra Ordner auf den PDA kopiert: die Exception tritt in beiden Fällen auf.


Gruß, maierkurt
 

MiK

Geoguru
Versuch es jetzt mal. Lag wohl daran, dass Du noch nicht eingestellt hast, ob Du Imperialist bist oder nicht.
 
OP
M

maierkurt

Geowizard
Da ist irgendwie der Wurm drin, gleicher Fehler wie bisher.
Wenn ich in den Präferenzen "Imperial" enstelle, läßt sich der Goto-Tab erst gar nicht anwählen. Die Buttons werden aber scheinbar richtig initialisiert: klicke ich blind an die richtige Stelle, so erscheinen sie.
 

MiK

Geoguru
Oh, sorry, habe ich überlesen. Auf dem PDA habe ich es noch nicht getestet. Kann es sein, dass die neue Klasse noch irgendwo richtig eingetragen werden muss?
Funktioniert denn die Exe auf dem PC?
 
OP
M

maierkurt

Geowizard
Ich habe die exe jetzt auf dem PC getestet -> läuft.
Die aktuelle NB r1671 (ich nehme im Moment nur die "offiziellen" vom Server, compiliere also nicht selbst) läuft auf dem PDA immer noch nicht richtig.
Stelle ich "Imperial" ein, lässt sich der Goto-Tab nicht öffnen, also so wie gehabt.
 

Engywuck

Geowizard
Die Fehlermeldung entstammt der neuen Einheitenkonvertierungsklasse. Wie wir es aber schaffen, diese Fehlermeldung herauszukitzeln, ist mir noch ein bisschen ein Rätsel.
Ich habe versucht, die Fehlermeldung ("Cannot convert...") etwas aussagekräftiger zu gestalten. Er sollte jetzt angeben, welche Einheiten er nicht konvertieren kann. Kannst Du das mal probieren?
Siehst Du vielleicht auch einen Stack-Trace? Falls ja, würde es mich interessieren, in welcher Funktion dieser Fehler passiert.

Gruß,
E.
 
OP
M

maierkurt

Geowizard
Würde ich sehr gerne machen.
http://pub.naturalnet.de/~nik/CacheWolf-BE/zlog.txt schrieb:
Doing CW nightly build.
Di 3. Mär 18:12:02 CET 2009 - Updating SVN working copy to most recent revision ...
Nothing to do, most recent build 1671 is current revision .
Um 18:40 habe ich ihn angestoßen, na, mal abwarten.

EDIT:

BINGO!

Es funktioniert! Keine Exception, der Goto-Tab läuft auch wieder korrekt.
Anmerkung: Ich habe zum Testen immer die Dateien von NB-Server genommen, keine Eigenkompilate.

EDIT2: Um ganz sicher zu gehen habe ich gerade die r1672 gegen die r1671 auf dem PDA ausgetauscht: in der r1671 tritt der Fehler (logischerweise) noch auf. Es war also kein Nebeneffekt oder soetwas.
Nur: was hast Du in der r1672 verändert?


Gruß, maierkurt
 

Engywuck

Geowizard
maierkurt schrieb:
Nur: was hast Du in der r1672 verändert?
Naja, kleine aber feine Änderungen:
Code:
Vorher:

		if (result == Double.NaN) {
			// TODO Meldung verbessern
			throw new UnsupportedOperationException("Cannot convert")
		}

Nachher: 

		if (String.valueOf(result).equals("NaN")) {
			Global.getPref().log("Cannot convert "+getUnit(sourceUnit)+ " to "+getUnit(targetUnit));
			throw new UnsupportedOperationException("Cannot convert "+getUnit(sourceUnit)+ " to "+targetUnit);
		}
Wobei es mich ein bisschen wundert, wie das zu dem Fehler führen kann.

Gruß,
E.
 

MiK

Geoguru
Vergleiche auf NaN sind immer ein bisschen tricky. Und vor allem verhält es sich gerne auf verschiedenen Plattformen unterschiedlich. So ein Problem hatte ich bei einem anderen Projekt auch schon mal. Mit dem String scheint es zuverlässiger zu funktionieren.
 

pfeffer

Geowizard
da sollte man vielleicht noch mal gucken, ob das nicht anders geht. Wie wir ja nun auch offiziell von Michael Bereton wissen, machen Strings alles langsamer...

Gruß,
Pfeffer.
 

Silas

Geocacher
Ich kenn mich mit Java (und ewe/eve erst recht) nicht gut aus, aber gibts vielleicht ein Double.isNaN()? Zumindest unter 1.4.2 isses möglich: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Double.html#isNaN()
 

Engywuck

Geowizard
Genau das wird ja verwendet, tuts aber wohl nicht so richtig. Werde da mal eine boolean-Variable einführen, und mit dieser Verfolgen, ob anständig konvertiert werden konnte. Das sollte auf jeden Fall klappen und ist schnell.
 

Silas

Geocacher
Nee, du prüfst doch auf result == Double.NaN, wobei result mit Double.NaN initialisiert ist, oder?

Laut http://en.wikipedia.org/wiki/IEEE_754 und http://en.wikipedia.org/wiki/NaN ist NaN aber per Definition niemals gleich NaN, sodass auch Double.NaN == Double.NaN false ergeben sollte.

Obwohl die Exception dann ja nie fliegen dürfte, verwirrend. Ich würds trotzdem mal mit isNaN() ausprobieren.

Edit: Ja, auf ein Boolean zu prüfen sollte sowieso klappen ;)
 
Oben