ich habe mich auch mal ein wenig mit der Pluginschnittstelle vertraut gemacht und mich dabei an das Handbuch gehalten.
Dort gibt es einerseits die Bibliothek und das Beispiel zum Download, welche ich mir dann als Projekt in der Entwicklungsumgebung meiner Wahl eingerichtet habe (in diesem Fall VS Code).
Nachdem dies eingerichtet wurde, kam aber beim Ausführen der Fehler.
Code: Alles auswählen
Exception in thread "listenThread" java.lang.NoClassDefFoundError: js/java/schaltungen/timesystem/TimeFormat$STYLE
at js.java.stspluginlib.PluginClient$ZugFahrplanZeile.<init>(PluginClient.java:99)
at js.java.stspluginlib.PluginClient.parseStartTag(PluginClient.java:525)
at js.java.tools.xml.xmlreader.startElement(xmlreader.java:326)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:518)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1387)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2726)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1224)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:637)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:326)
at java.xml/javax.xml.parsers.SAXParser.parse(SAXParser.java:197)
at js.java.tools.xml.xmlreader.updateDataByString(xmlreader.java:286)
at js.java.stspluginlib.PluginClient.run(PluginClient.java:453)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.ClassNotFoundException: js.java.schaltungen.timesystem.TimeFormat$STYLE
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 19 more[code]
Dabei sehe ich Folgendes:
Sowohl die Klasse wand.java (Bsp) als auch PluginClient$ZugFahrplanZeile (Plugin) versuchen die Klasse "js.java.schaltungen.timesystem.TimeFormat" zu importiere. Mittels CMD und dem Befehl "jar tf stspluginlib.jar" stellt sich raus, dass diese Klasse halt nicht in der pluginlib existiert.
Damit sehe ich in der Form drei mögliche Wege:
- Nachreichen der fehlenden Klasse für die Pluginbibliothek. Gleichzeitig kann ich da jetzt auch nicht sehen, welche weiteren Abhängigkeiten dadurch entstehen.
- Umstellen von der eigenen Klasse für Zeitformatierung auf den von Java bereitgestellten DateTimeFormatter. Auch hier Abhängigkeiten & Spezialitäten unbekannt (wie bei 1.).
Code: Alles auswählen
bisher: private final TimeFormat tf = TimeFormat.getInstance(TimeFormat.STYLE.HM); String time = tf.formatTime(c.getSimutime()); alterativ: private final DateTimeFormatter tf = DateTimeFormatter.ofPattern(); String time = tf.format(Instant.ofEpochMilli(c.getSimutime()).atZone(ZoneId.systemDefault())); --> so zumindest mit der wand.java experimentiert
- Wie vmtl. der Großteil der anderen Plugins, selber was schreiben.
Vielleicht kann da jemand aus dem Bereich der Entwicklung mal drüber schauen.
Grüße
Paul Jakob