2017-02-20 1 views
0

Nach dem Lesen einer Reihe von Posts in Bezug auf das Resource System renne ich immer noch mit diesem in eine Wand.getResource der Klasse und Classloader null beim Ausführen von jar

Das Szenario:

Ich bin derzeit ein javafx Anwendungm zu entwickeln, die sowohl als Glas und als Applet ausgeführt werden soll. Ich verwende den einfachen Trick JavaFX into Swing Applications, um meine Anwendung in ein fxpanel zu verpacken.

Beide Versionen funktionieren gut in Eclipse.

Aber jetzt, beide jar und das Applet laufen in das gleiche Problem, sobald der erste fx Controller aufgerufen wird.

Meine Paketstruktur:

/* 
1. 
    2. 
     3. 
      controller. 
         EntryPoint.class <-- Main 
         MenuController.class 
         TabsController.class 
      ui. 
       pane. 
         MainMenu.fxml 
         Startuppane.fxml 
         Tabs.fxml 
       note. 
         NoteSearch.fxml 
         NoteView.fxml 

*/ 

// edit: Baum Befehl von meinem entpackten jar: Pastebin // bearbeiten Ende

Meine Anwendung des folgenden Fälle:

Zuerst Er lädt die RootLayout von EntryPoint.class

Und dann tw o Childs, ein Menü und einige Tabs.

Das Menü Funktioniert gut, weil der MenuController selbst keine anderen untergeordneten Elemente lädt.

Jetzt kommt das eigentliche Problem, wenn der TabsController aufgerufen wird, und versucht, seine eigenen untergeordneten Elemente wie das NoteView zu laden.

So wird das TabPane geladen, und wenn der TabsController nun versucht, seine eigenen Childitems zu laden. Ich bekomme immer einen NullPointer im exportierten Jar oder im Webapplet.

Ich versuchte, die ChildItems mit den folgenden Methoden laden:

NOTE_SEARCH_LOADER.load(TabsController.class.getResourceAsStream("/1/2/3/ui/note/NoteSearch.fxml")); 

funktioniert gut in Eclipse, aber einmal exportiert Ursachen unbekannt Pfad/Nullpointer

NOTE_SEARCH_LOADER.load(TabsController.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml")); 

Mit Classloader stattdessen entfernt ersten Slash. Arbeiten in Eclipse, exportierten einmal Ursachen Unbekannter Pfad/Nullpointer

NOTE_SEARCH_LOADER.load(EntryPoint.class.getResourceAsStream("/1/2/3/ui/note/NoteSearch.fxml")); 

Mit dem EntryPoint.class (Haupt-) mit Absolute-Pfad. Funktioniert in Eclipse, sobald exportiert. Unbekannter Pfad/NullPointer beim Export.

NOTE_SEARCH_LOADER.load(EntryPoint.class.getClassLoader().getResourceAsStream("1/2/3/ui/note/NoteSearch.fxml")); 

Mit dem ClassLoader aus meiner Hauptklasse entfernt ersten Slash. Funktioniert in Eclipse, Unbekannter Pfad/NullPointer beim Export.

// edit3: Ich habe einen weiteren Test gemacht, den Code vom TabController in den EntryPoint kopiert. Die EntryPoint-Version des Codes funktioniert auch nach dem Export in ein Jar oder Applet.

Ich denke, es hat etwas zu tun, wie der Controller aufgerufen wird?

// bearbeiten Ende

ich meinen Kopf bin kratzen und fragen, was sonst könnte ich es versuchen.

// edit2: Der NullPointer verursacht FXML kann an der angegebenen Stelle gefunden werden, wenn ich meine fxml entpacke.

// bearbeiten Ende

Vielleicht bin ich gerade wieder etwas ganz offensichtlich fehlt.

Sinclery

Fabian95qw

Liste der besuchten Themen:

Get a resource using getResource()

Preferred way of loading resources in Java

URL to load resources from the classpath in Java

How to reference javafx fxml files in resource folder?

How do I use Java getResource() to get a resource from a parent directory?

Why does getResource return null

+0

Haben Sie sichergestellt, dass 'NoteSearch.fxml' wirklich in der JAR-Datei ist? –

+0

Ich habe mein Glas ausgepackt, um sicherzugehen, und ja, die Dateien können an dem angegebenen Ort gefunden werden. –

Antwort

0

Ich habe gerade den einfachen Weg nach Stunden zu versuchen, indem er einfach die FXML in den gleichen Ordner wie die Klasse zu werfen, die das spezifische fxml erforderlich.

Also meine Struktur sieht nun wie folgt aus: Pastebin

und ich bin jetzt noch einmal die Ressourcendatei Zugriff mit.

NOTE_SEARCH_LOADER.load(TabsController.class.getResourceAsStream("NoteSearch.fxml")); 

Jetzt funktionieren sowohl das exportierte Jar als auch die Web Applet Version.

Sincerly Fabian95qw

Verwandte Themen