Programm findet Resource nicht.

Joob

Top Contributor
Es geht um folgende Zeilen:

Java:
FXMLLoader                              loader              = new FXMLLoader(getClass().getResource("/PVA00000/Views/You/YouLinkList.FXML"));
Pane                                    panevarfxmlfile     = (Pane) loader.load();


A) Wenn ich mein Programm im Netbeans starte läuft alles OK.
B) Wenn ich die Distribution mit netbeans/gradel generieren (clean and build in netbeans) lasse,
und von der erzeugten Batch aus starte, wird die Resource nicht gefunden.

Ich habe alle meine Files im Resourcenordner, unter anderem auch jasper files,
welche gefunden werden auch Grafikfiles werden gefunden.
An einer anderen Stelle im Programm habe ich etwa gleichen Code, auch das wird unter Voraussetzung B gefunden und angezeigt.

Hat jemand eine Idee wieso unter der Voraussetzung start aus Netbeans alles OK ist
und unter der Voraussetzung start aus der erzeugten Distribution/Batchfile die oben gezeigte fxml Resource nicht gefunden wird
andere Resourcen aus dem gleichen Verzeichnis aber gefunden werden.


Das ist die Fehlermeldung aus dem Comandfenster der Batch

Code:
java.lang.IllegalStateException: Location is not set.
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2541)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2516)
        at org.joobsoft.vt.PVA00000.Controller.You.YouController.showLinkList(YouController.java:192)
        at org.joobsoft.vt.PVA00000.Controller.You.YouController.showArea(YouController.java:133)
        at org.joobsoft.vt.PVA00000.Controller.You.YouController$1.changed(YouController.java:108)
        at org.joobsoft.vt.PVA00000.Controller.You.YouController$1.changed(YouController.java:100)
        at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:181)
        at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
        at javafx.beans.property.ReadOnlyObjectPropertyBase.fireValueChangedEvent(ReadOnlyObjectPropertyBase.java:80)
        at javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent(ReadOnlyObjectWrapper.java:102)
        at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:113)
        at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:147)
        at javafx.scene.control.SelectionModel.setSelectedItem(SelectionModel.java:105)
        at javafx.scene.control.MultipleSelectionModelBase.lambda$new$0(MultipleSelectionModelBase.java:67)
        at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:136)
        at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:80)
        at javafx.beans.property.ReadOnlyIntegerPropertyBase.fireValueChangedEvent(ReadOnlyIntegerPropertyBase.java:78)
        at javafx.beans.property.ReadOnlyIntegerWrapper.fireValueChangedEvent(ReadOnlyIntegerWrapper.java:102)
        at javafx.beans.property.IntegerPropertyBase.markInvalid(IntegerPropertyBase.java:114)
        at javafx.beans.property.IntegerPropertyBase.set(IntegerPropertyBase.java:148)
        at javafx.scene.control.SelectionModel.setSelectedIndex(SelectionModel.java:69)
        at javafx.scene.control.MultipleSelectionModelBase.select(MultipleSelectionModelBase.java:424)
        at javafx.scene.control.MultipleSelectionModelBase.clearAndSelect(MultipleSelectionModelBase.java:371)
        at javafx.scene.control.TreeView$TreeViewBitSetSelectionModel.clearAndSelect(TreeView.java:1530)
        at com.sun.javafx.scene.control.behavior.CellBehaviorBase.simpleSelect(CellBehaviorBase.java:282)
        at com.sun.javafx.scene.control.behavior.CellBehaviorBase.doSelect(CellBehaviorBase.java:246)
        at com.sun.javafx.scene.control.behavior.CellBehaviorBase.mousePressed(CellBehaviorBase.java:176)
        at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274)
        at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:247)
        at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:234)
        at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
        at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
        at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
        at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
        at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
        at javafx.event.Event.fireEvent(Event.java:198)
        at javafx.scene.Scene$MouseHandler.process(Scene.java:3881)
        at javafx.scene.Scene.processMouseEvent(Scene.java:1874)
        at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2607)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:411)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:301)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:450)
        at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:424)
        at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:449)
        at com.sun.glass.ui.View.handleMouseEvent(View.java:551)
        at com.sun.glass.ui.View.notifyMouse(View.java:937)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
        at java.base/java.lang.Thread.run(Thread.java:831)
 
Zu NetBeans kann ich nichts sagen - sieht erst einmal so aus, dass Du da keinen Maven Build in NetBeans anstartest sondern irgend etwas anseres, so dass es dann funktioniert. Ich würde die Verzeichnisstruktur und Dateinamen im Detail prüfen. Was oft mal falsch läuft ist eine falsche Gross-/Kleinschreibung oder so.

Aber das ist nur geraten. Alles, was die Fehlermeldung aussagt, ist halt. dass die Ressource nicht gefunden wurde.
 
Ein möglicher Fehler wäre, dass du beim Packen der Resourcen FXML-Dateien ausgeschlossen hast. Das würde genau das Verhalten auslösen.

Eine weitere Möglichkeit wäre, dass die Datei keine Resource ist, sondern eine lokale Datei in deinem Runtime-Testordner.

Prüf mal, ob die FXML in einer deiner Jar-Dateien vorhanden ist.
 
@Neumi5694 Wenn die App startet also die anderen FXML geladen werden kann ich dann davon ausgehen das ich die FXML nicht ausgeschlossen habe, oder ist das nicht so. Im Testordner befinden sich die FXML nicht. Aber wie kann ich in der JAR nachschauen ob die FXML vorhanden ist da ist doch alles verschlüsselt.

@KonradN Das mit der Gross und Kleinschreibung kann ich ausschließen da es doch funktioniert wenn ich es aus Netbeans starte, deshalb habe ich mich auch nicht weiter auf Fehler im Code konzentriert.

Ich habe und das ist nur so eine Ahnung das Gefühl das es daran liegen kann das es innerhalb einer TabPane in einem Included liegt kann das eventuell sein ?
 
@KonradN Du hattes Recht, ich habe .FXML verwendet anstatt .fxml
Das machte in Netbeans keinen Unterschied aber in der JAR sehrwohl. Ich hatte das Problem schon einmal vor ein paar Monaten gesehen war aber noch nicht so weit und hab jetzt auch schon wieder 2 Tage gebraucht um das zu finden.
Schönen Dank.
 
eine jar ist einfach nur ein zip ordner so weit ich weis
Richtig. Und die sind Case-sensitive (ok, eigentlich nicht richtig, Java ist beim Auslesen/Zugriff Case sensitive).

Fordert man hingegen eine Datei über ihren Namen vom Betriebssystem an, dann ignoriert Windows die Groß-Kleinschreibung, anders als z.B. Linux. Zur Ausführungszeit mittels Netbeans werden die Dateien von der Platte gelesen und nicht aus der Jar, bzw. liegen sowohl in der kompilierten Jar als auch auf der Platte vor. Und Java nutzt alles, was da ist, findet also auch die falsch bezeichnete Datei, da Windows da keinen Unterschied macht.

Würde Joob z.B. Linux zum Entwickeln nutzen, dann wäre der Fehler schon hier aufgetreten.

@Joob zum "Nachschauen" einfach die .jar nach .zip umbenennen.
 
Zuletzt bearbeitet:

Zurück
Oben