我目前正在学习JavaFX并尝试构建小型GUI。我觉得我做得很好。唯一的问题是当我从Eclipse运行程序时,它运行顺畅但当我将其导出为Runnable Jar File并尝试在外部运行时,它不起作用。
这是一个maven项目,下面是我的程序的主要方法:
public class Main extends Application {
private Stage stage;
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("/view/main.fxml"));
this.stage = primaryStage;
primaryStage.setTitle("SLATE");
primaryStage.setScene(new Scene(root, 800, 700));
primaryStage.show();
}
public Stage getStage() {
return stage;
}
public static void main(String[] args) {
launch(args);
}
}
我尝试通过从终端运行JAR来调试它,下面是错误:
Exception in Application start method
java.lang.reflect.InvocationTargetException
.....
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
我觉得它与我想的资源路径有关但我无法以任何方式修复它。奇怪的是它可以在Eclipse中运行,但JAR文件没有相同的代码。
非常感谢您的帮助。注意:Project View
答案 0 :(得分:0)
您的视图的路径似乎是错误的(因为它使用当前类的包名称),请尝试这样做:
FXMLLoader loader = new FXMLLoader();
Parent rootNode = (Parent) loader.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("view/main.fxml"));