Seite 1 von 1

Programm startet kein 2tes mal

Verfasst: 14. Dez 2004, 20:11
von Haldan
Hi auch.

Also ich habe folgenden BUG. Beim ersten Start des helden 4.* kommt die Fehlermeldung "Dokumentenwurzelverzeichnis fehlt", aber das Programm startet trotzdem.
Wenn ich das Programm dann verlasse, wird auch normal im %USERVERZEICHNIS% die helden.xml und die .heldEinstellungen.xml angelegt.

Bei einem zwieten Start des Programm kommt dann aber nur noch noch folgender StackTrace

Code: Alles auswählen

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

G:\_downloads>java -jar helden_4_4.jar

org.xml.sax.SAXParseException: Dokumentwurzelelement fehlt
        at org.apache.crimson.parser.Parser2.fatal(Unknown Source)
        at org.apache.crimson.parser.Parser2.fatal(Unknown Source)
        at org.apache.crimson.parser.Parser2.parseInternal(Unknown Source)
        at org.apache.crimson.parser.Parser2.parse(Unknown Source)
        at org.apache.crimson.parser.XMLReaderImpl.parse(Unknown Source)
        at org.apache.crimson.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
        at helden.framework.held.persistenz.XMLEinstellungenParser.ladeEinstellungen(XMLEinstellungenParser.java:59)
        at helden.framework.held.persistenz.XMLPersistierer.ladeEinstellungen(XMLPersistierer.java:107)
        at helden.framework.held.werkzeuge.HeldenFabrik.ladeEinstellungen(HeldenFabrik.java:145)
        at helden.gui.HeldenLadenAction.ladeHelden(HeldenLadenAction.java:100)
        at helden.gui.HeldenFrame.<init>(HeldenFrame.java:96)
        at helden.Helden.<init>(Helden.java:58)
        at helden.Helden.main(Helden.java:48)
Exception in thread "main" java.lang.NullPointerException
        at helden.gui.HeldenLadenAction.ladeHelden(HeldenLadenAction.java:107)
        at helden.gui.HeldenFrame.<init>(HeldenFrame.java:96)
        at helden.Helden.<init>(Helden.java:58)
        at helden.Helden.main(Helden.java:48)
es hilft dann nur noch ein löschen der .heldenEinstellungen.xml welche folgendermaßen aussieht

Code: Alles auswählen

?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<einstellungen>
<Global>
<xmlPfad name="F:\Dokumente und Einstellungen\#sog\helden.xml"/>
<gpStart name="110"/>
<metaTalentAusgeben name="false"/>
<goettergeschenk name="false"/>
<geldkreisedrucken name="true"/>
<tierfeld name="true"/>
<langerKommentar name="false"/>
<exportZippen name="false"/>
<zauberKommentar name="false"/>
<font name="Serif.plain" fontgroesse="0"/>
<letzterPfad name=""/>
<slbogen>
<slheld0 name="null" nummer="-1"/>
<slheld1 name="null" nummer="-1"/>
<slheld2 name="null" nummer="-1"/>
<slheld3 name="null" nummer="-1"/>
<slheld4 name="null" nummer="-1"/>
</slbogen>
</Global>
</einstellungen>
Das ganze passiert unter

Windows XP Professionell SP2 ( alle sonstigen Patches )
installiertem (aktiviertem und deaktiviertem) "Style XP"
Kerio PFW

Als Runtime läuft:
java version "1.4.2_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_06-b03)
Java HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode)

Der User hat volle Admin Rechte


greets
Haldan

Verfasst: 14. Dez 2004, 20:47
von Zafnir
Hallo Haldan.

Schau nochmal nach ob vor dem ?xml ein "<" statht.

Ansonsten kann es sein das er sich an # im xmlPfad stört.
Wenn Du einen Account ohne # erstellst und dann mal mit dem User ausprobierst.
Oder diu wählst in Helden einen anderen speicherort in den Einstellungen.

MfG Maik

Verfasst: 17. Dez 2004, 23:39
von Haldan
am Anfang der XML Datei befindet sich besagtes "<" Zeichen ( das ist mir wohl beim copy&paste verloren gegangen.

das mit dem # im Userverzeichnis sollte ihn eigentlich nicht stören, denn wenn ich mir "normal" die System.property "user.home" per sysout in java ausgeben lasset, dann bekomme ich ein korrektes Verzeichnis "F:\Dokumente und Einstellungen\#sog" zurück. somit sollte es eigentlich keine schwierigkeiten geben.

Aber ich werde das demnächst noch mal mit einem mit einem user ausprobieren, der dann dieses # nicht besitzt.


greets
Haldan

Verfasst: 18. Dez 2004, 09:58
von Zafnir
Es hat weniger mit dem Betriebssystem als mit dem Übersetzer des XML-formates zu tun.
Ich glaube das es die # mit einer besonderen bedeutung belegt und sich dann daran aufhängt, weil die an einer für ihn ungewohnten Stelle auftaucht.

MfG Maik

Verfasst: 21. Dez 2004, 22:57
von Haldan
Hallo Maik,

ich denke ich habe das Problem gefunden und auch, wie Ihr den Fehler dann beheben könntet.

Der Bug liegt definitiv in dem Sonderzeichen "#".

Die XML Datei ist ja schliesslich auf encoding="UTF-8" definiert. Somit MUSS das # in einer ParseException enden.

Ergo müßte nicht nur die helden.xml (denn die wird ja schliesslich in UTF-8 codiert) sondern auch die .heldeneinstellungen.xml in UTF-8 geschrieben werden ( Es soll ja schliesslich auch Usernamen geben, die Umlaute besitzen ;) ).
Danach sollte das mit dem # im Userverzeichnis eigentlich kein Problem mehr beim parsen sein.

greets
Haldan

Verfasst: 22. Dez 2004, 09:35
von Zafnir
Hallo Haldan.

Umlaute sind auch nicht das Problem, "Körperbeherrschung" macht er ja auch richtig.
Wenn ich mich recht erinnere benutzt der Parser "#" als Marken für ein Wurzelelemant, die er während des Parsens einfügt.

Großartig was ändern können wir nicht, denn wir schmeißen das File in den DOM rein und bekommen Nodes heraus die wir auf unsere Angaben parsen. Da der "Fehler" im DOM liegt währe das einzige beim Speichern die "#" durch eine unübliche kombination zu ersetzen und beim Laden wieder zurück zu wandeln. Das verschiebt aber nur das Problem.

MfG Maik

Verfasst: 22. Dez 2004, 21:48
von Haldan
Tja, aus deiner Antwort lese ich dann einmal, das ich wohl somit pech gehabt und das Tool wohl nicht benutzen kann, da ich mir nun mal nicht nur wegen des Tools gleich nen neuen Benutzer anlege, um dann immer umzuswitchen, nur wenn ich das Programm benutzen möchte.

Schade eigentlich, aber da kann man dann wohl nichts machen.


greets
Haldan

Verfasst: 23. Dez 2004, 09:59
von Zafnir
Nein, du must nicht gleich aufgebe!

Du must nur den Speicher Ort in den Einstellungen ändern, oder gleich im HeldEinstellungen.xml.
Dann ist es egal welchen Namen dein User hat.

MfG Maik

Verfasst: 23. Dez 2004, 15:21
von Haldan
Hi Maik,

nein das löst das Problem leider nicht, denn in den einstellungen, kann ich lediglich einstellen, wo die "helden.xml" gespeichert werden soll.

Die .heldenEinstelleungen.xml bleibt leider immer noch im "user.home" und dort sucht das Programm auch definitiv nach den .heldenEinstellungen.xml. Und genau dort tritt die Exception ja immer wieder auf.

Als Workarround wäre es vielleciht schöne, wenn man dem jar File ein als Argument, den Speicherort des .heldenEinstellungen.xml übergeben könnte.

Dann kann man zumindest "frei" entscheiden, wohin die Einstellungen für das Programm gespeichert werden sollen. ( denn eigentlich gehören diese ja auch in das Verzeichnis, in dem man die helden.jar gespeichert hat ;) )

Das würde mir bei meinem Problem dann dann helfen, denn so kann ich mir dann wenigstens ne batch datei machen, um dem Programm einen anderen Pfad zu übergeben.


gruß
Haldan

Verfasst: 23. Dez 2004, 16:05
von Zafnir
Das einstellen des Verzeichnisses ist noch etwas Bugig.

Wichtig ist nach dem Auswählen des Verzeichnisses das Speichern nochmal auszuführen, weil ansonsten das .Heldeinstellungen.XML nicht geschrieben wird.
Damit meine ich einmal Speicher zum Auswählen des Verzeichnisses und dann Beenden+Speicher oder die Diskette zum Speichern des .HeldneEinstellunge.xml

Dann sollte dein Problem gelöst sein.

MfG Maik

Verfasst: 28. Dez 2004, 11:43
von Zafnir
Und funktioniert es jetzt?

Verfasst: 2. Jan 2005, 17:09
von Haldan
Hallo Maik,


nein es funktioniert derzeit immer noch nicht, da durch das einstellen des Speicherortes nur der Speichedrort für die HELDEN.XML angegeben werden kann.

Die .HELDENEINSTELLUNGEN.XML wird IMMER in das root-verzeichnis des USER.HOME gespeichert, auch wenn in den Einstellungen ein ganz anderes Verzeichnis steht. Die Helden.xml wird korrekt in das neue Verzeichnis gespeichert.

Da der Fehler aber darin´, das die die .heldeneinstellungen.xml nicht geparsed werden kann, weil die datei in einem Verzeichnis mit einer # steht. hängt sich anwendung bereits dort schon auf mit der obigen exception.

gruß
Haldan

Verfasst: 3. Jan 2005, 12:44
von Zafnir
Also Ich habe ein Wenig Expermentiert.

Es gibt zwei Möglichkeiten für dich das Problem zu umgehen:
1) Deinen Benutzernamen ändern. Unter Systemeinstellungen -> Benutzerkonten
2) Der Homepath in der Registry ändern.
Dazu Must du dir Temporär einen Zweiten Admin Account einrichten.
Dann die mit dem Neuen Account anmelden (der andere darf nicht aktiv sein).
Dann mit [start] - [ausführen] -> regedit [ausführen]
Dann den Eintrag HOMPATH solange suchen bis du den gesuchten Pfad gefunden hast.
Den Ändern.
Jetzt must du nur noch das alte verzeichniss an die Stelle verschieben oder Umbenennen.

Dann sollte es klappen.

Ich würde dir 1) empfehlen, weil es die sauberere Variante ist.

MfG Maik

Verfasst: 3. Jan 2005, 18:18
von Haldan
Ok, das wäre zumindest ein Workaround, damit ich das Programm dann nutzen kann, danke dafür.


dennoch wäre es schön, in einer der nächsten Versionen den Speicherort der .heldeneinstellungen.xml selber entscheiden zu können, wie oben schon mal beschrieben.
... wenn man dem jar File einen String als Argument übergeben kann, der den Speicherort der .heldenEinstellungen.xml darstellt.

Dann kann man zumindest "frei" entscheiden, wohin die Einstellungen für das Programm gespeichert werden sollen. ( denn eigentlich gehören diese ja auch in das Verzeichnis, in dem man die helden.jar gespeichert hat
Bis dahin, kann ich sicherlich mit dem Workaround von dir leben. Aber wer weiss, es gibt sicherlich den einen oder anderen, der auch Sonderzeichen im benutzernamen hat.

gruß und besten Dank

Haldan