【问题标题】:JavaFx project compiles with maven but doesnt execute [duplicate]JavaFx项目用maven编译但不执行[重复]
【发布时间】:2018-01-04 10:19:50
【问题描述】:

我正在用 Java 编写程序,并且在 GUI 中使用 JavaFX。直到今天,我一直使用 javafx 独立进行编码,并且一切运行顺利。 我决定开始使用 maven,但现在项目无法编译,也无法运行或执行。

    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:748)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
    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.java.Main.start(Main.java:19)
    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
Exception running application main.java.Main

这是我的主要课程:

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

@Override
public void start(Stage primaryStage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("../fxml/AuthenticationForm.fxml"));
    primaryStage.setTitle("Gym Master 1000");
    primaryStage.setScene(new Scene(root));
    primaryStage.show();
    primaryStage.setResizable(false);
    primaryStage.centerOnScreen();

    root.getChildrenUnmodifiable();
}

我在其他项目中使用过 maven,但从未使用过 javafx。我该怎么办?

【问题讨论】:

标签: java maven javafx javafx-2 javafx-8


【解决方案1】:

首先确保您的 .fxml 文件与主类位于同一目录中,并使用 .getResource("complete path") 中的完整路径,而不是 getResource("../fxml/AuthenticationForm.fxml")),因为 .. 无效。

你也可以使用:

Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("completePATH"));

改为:

Parent root = FXMLLoader.load(getClass().getResource("../fxml/AuthenticationForm.fxml"));

更多信息,您可以查看here 和here。 感谢 James_D 提供的信息。

【讨论】:

  • .. is not a valid resource name,所以我认为这不会解决问题。
  • 经过一番研究,你是对的,“../fxml/AuthenticationForm.fxml”不是一个有效的名称,我会立即编辑我的问题。谢谢。
猜你喜欢
  • 2013-10-01
  • 2012-12-10
  • 2016-07-15
  • 1970-01-01
  • 2019-08-16
  • 2021-06-25
  • 2016-10-27
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多