2014-07-01 44 views
0

我正在使用NetBeans开发Java FXML应用程序。为了构造目的,我希望所有可重用的代码都位于外部自制库中(只是另一个NetBeans Java项目)。如何在外部自制库中加载资源?

我希望库代码中动态使用类似的加载给予FXML观点:

class Loader { 
    public static void load(Stage stage, String view) { 
     Parent root = FXMLLoader.load(Loader.class.getClass().getResource(view); 
     Scene scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 

在基本FXML应用程序主类:

class Main extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception, NullPointerException { 
     Loader.load(stage, "FXMLDocument.fxml"); 
    } 
} 

但FXML视图文件位于bacis fxml应用程序项目(不是放置代码的外部库项目)。我对这种先进的Java技术并不是很有经验,但我猜这是一个classpath的问题。

用的getResource()行引发的错误:

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:483) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305) 
    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:483) 
    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:894) 
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56) 
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: java.lang.NullPointerException: Location is required. 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3223) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3120) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3113) 
..... 

回答

0

只需要包名称添加到文件路径类似 Loader.load(stage, "package/FXMLDocument.fxml"); ....