yankee42 / courseplay-osm-converter

Konvertiert Courseplay-Kurse, damit sie mit dem JOSM-Editor bearbeitet werden können.
GNU General Public License v3.0
15 stars 5 forks source link

Course->OSM funktioniert nicht #13

Closed VatriXxX closed 4 years ago

VatriXxX commented 4 years ago

Hallo, ich wollte mir mal Courseplay Editor anschauen und habe gleich ein Problem. Jetzt wollte ich meine Strecke editieren, öffne den CourseConverter, alles noch gut, gehe dann auf Course -> OSM, wähle meine CourseManager.xml Datei aus, gebe 4096 ein, Speicherort & Name. Und dann kommt dieser Fehler:

java.lang.NullPointerException at com.github.yankee42.courseconvert.CourseManager.fromElement(CourseManager.java:67) at com.github.yankee42.courseconvert.CourseOsmConverter.convertManager(CourseOsmConverter.java:28) at com.github.yankee42.courseconvert.gui.MainGui.tryCourseToOsm(MainGui.java:135) at com.github.yankee42.courseconvert.gui.MainGui.courseToOsm(MainGui.java:98) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Er erstellt die OSM demnach nicht. Kann mir wer helfen?

Die Map ist Multimap2019

Courseplay neuste Version und Converter auch

yankee42 commented 4 years ago

Das deutet daraufhin, dass in dem courseManager.xml bei einem Eintrag das Attribut isUsed nicht vorhanden ist. Ich kann den Code so ändern, dass das kein Fehler mehr ist, dafür wäre es aber hilfreich zu wissen, ob der Wert, wenn er nicht vorhanden ist true oder false sein soll.

Gelesen wird der Wert vion Coursplay hier: https://github.com/Courseplay/courseplay/blob/efe601acba2ede37f3e62a25111209029a070ec2/course_management.lua#L1357.

Leider geht daraus nicht hervor, ob der Wert per Standard das eine oder das andere ist. Auch die Dokumentation von getXMLBool schweigt dazu, was passiert, wenn das Attribut nicht existiert.

Um das zu überprüfen: Könntest du deine courseManager.xml hier hochladen? (Dafür die Datei in ein zip-Archiv packen und dann hier per Drag-Drog einem Kommentar anhängen oder die Datei mit einem Texteditor öffnen und den Text hier reinkopieren).

VatriXxX commented 4 years ago

@yankee42 Da mir das weiterhelfen würde, wenn ich den Editor mal nutzen könnte. Kannst du gerne die Courseplay xml Datei haben.

CoursePlay.zip

yankee42 commented 4 years ago

Ach das ist ja spannend. Da sind ja sogar <slot>s drin, die gar keine Attribute haben:

<courseManager>
    <saveSlot>
        <slot/>
        <slot/>
        <slot fileName="courseStorage0003.xml" isUsed="true" id="13" parent="1" name="F36-Hof"/>
        <slot fileName="courseStorage0004.xml" isUsed="true" id="12" parent="1" name="Hof-F37"/>
        <!-- ... -->
    </saveSlot>
    <!-- ... -->
</courseManager>

Die sollten wir gefahrlos ignorieren können. Ich habe hier mal eine Previewversion gebaut. Bitte sag mir Bescheid ob es damit läuft. Wenn ja mache ich ein Release daraus: courseconvert.zip

VatriXxX commented 4 years ago

Oh, jetzt kommen noch mehr Fehler.

com.github.yankee42.courseconvert.ParseCourseException: Could not parse course from file <C:\Users\Patrick\Documents\My Games\FarmingSimulator2019\CoursePlay_Courses\FS19_Multimap2019.SampleModMap\courseStorage0096.xml>: java.io.FileNotFoundException: C:\Users\Patrick\Documents\My Games\FarmingSimulator2019\CoursePlay_Courses\FS19_Multimap2019.SampleModMap\courseStorage0096.xml (Das System kann die angegebene Datei nicht finden)
    at com.github.yankee42.courseconvert.CourseOsmConverter.parseCourse(CourseOsmConverter.java:135)
    at com.github.yankee42.courseconvert.CourseOsmConverter.convertManager(CourseOsmConverter.java:38)
    at com.github.yankee42.courseconvert.gui.MainGui.tryCourseToOsm(MainGui.java:149)
    at com.github.yankee42.courseconvert.gui.MainGui.courseToOsm(MainGui.java:109)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: C:\Users\Patrick\Documents\My Games\FarmingSimulator2019\CoursePlay_Courses\FS19_Multimap2019.SampleModMap\courseStorage0096.xml (Das System kann die angegebene Datei nicht finden)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:264)
    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
    at com.github.yankee42.courseconvert.XmlUtil.load(XmlUtil.java:16)
    at com.github.yankee42.courseconvert.CourseOsmConverter.parseCourse(CourseOsmConverter.java:126)
    ... 39 more
VatriXxX commented 4 years ago

Ich hab mal die courseStorage0096.xml eingefügt (eine anderen einfach kopiert und umbenannt) Und jetzt hat er die OSM Datei erstellt.

Edit: Wobei die ist 0KB groß

Edit: Okay sieht gut aus, lässt sich jetzt im OSM öffnen und bearbeiten, ich danke dir vielmals :)

yankee42 commented 4 years ago

Die courseStorage0096.xml müsste bei dir im Spiel der Pfad Verkauf ab hof/3 Anlieferung sein. Was passiert denn, wenn du den versuchst zu laden?

Ich hab mal die courseStorage0096.xml eingefügt (eine anderen einfach kopiert und umbenannt)

Theoretisch auch eine Lösung ^^.

Und jetzt hat er die OSM Datei erstellt.

Edit: Wobei die ist 0KB groß

0KB klingt jetzt nicht so erfolgreich. Bist du dir das sicher? Könnte es auch die hinterherhinkende Anzeige vom Dateibrowser sein? (Mal F5 drücken oder die Datei mit einem Texteditor öffnen und schauen ob was drin steht). Gab es einen Hinweis im Log oder sonst irgendeine Meldung?

VatriXxX commented 4 years ago

Die Datei ist zwar 0KB groß, lässt sich aber trotzdem öffnen im OSM und bearbeiten

Damit wäre so wie es jetzt aussieht das Problem gelöst. Ich danke dir vielmals :)