2017-10-22 12 views
1

は、ここに私の構造だMavenプロジェクトおよびJavaFXの持つリソースファイルを取得する方法

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("Form.fxml")); 
     primaryStage.setTitle("Hello World"); 
     primaryStage.setScene(new Scene(root)); 
     primaryStage.setResizable(false); 
     primaryStage.show(); 
    } 
} 

をしかし、これは見返りに巨額のエラーを取得します。

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javafx.fxml.LoadException: 
/C:/Users/myname/Dropbox/IntellijWorkspace/Somefoodplus/target/classes/Form.fxml 

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at Main.start(Main.java:11) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    ... 1 more 
Caused by: java.lang.NullPointerException 
    at SomeFoodPlus.FXML.Controller.initialize(Controller.java:22) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548) 
    ... 17 more 
Exception running application Main 

私のFXMLファイルは私のリソースフォルダの内側にあり、私のMain.classは私のJavaパッケージの中にあるので、私は間違って何ができるのか分かりません。私はそれがプロジェクトがmavenプロジェクトであることと関係しているとはかなり確信していますが、それが何であるかはわかりません。私はこれを理解するのを手助けしてください。私は既に解決策をオンラインで見てきましたが、誰もmaven + fxmlプロジェクトをやっていないようです。

答えて

0

あなたがgetResource("/Form.fxml")を試してみると、Jonathan Rosenneは本質的に真実であると言いますが、それはうまくいくはずです。これは、Class.getResourceが絶対パスではなく、パッケージ相対パスを使用するためです。例えば、Form.fxmlresources/<packages>/Form.fxmlにあった場合、あなたが今行っているコードは動作します。

もう1つのオプションは、常に絶対パスとみなされるgetClass().getClassLoader().getResourceを使用することです。

これら2つの方法の違いについては、すでにStackOverflow threadです。

+0

残念ながら、私は同じエラーが発生しました。私はJava 8を使用していますが、pom.xmlにサポートを追加するとすぐにエラーが発生します。何か案は?これは私のpom.xmlに追加するコードです:https://pastebin.com/raw/nEcXEfWD –

+0

これは非常に奇妙です。 POMからMavenビルドプラグインを削除したときに正常に動作すると言っていますか?また、 'getResource'がnullを返すことをデバッガで確認しましたか? – Spaceman1701

+0

ええ、それは確かにヌルを返すためです:( https://i.imgur.com/uyRskuH.png そして、私が言語を8未満に変更すると、うまくいきます。Java 8を追加するとすぐに、そのプラグインをmavenに追加してJava 8で動作させる必要があります。私にはわからない別の解決策がありますか? –

2

"/Form.fxml"を試してください。 the Java Class APIを参照してください。

+0

動作しなかった、同じエラー。 –

+0

jarがない場合は、zipユーティリティまたはターゲットフォルダを使用してjarの内容を確認してください。 –

+0

内容はどうですか?ファイルはすべてそこにあります。 –

関連する問題