FXMLLoader.load(getClass().getClassLoader().getResource(";Login.fxml";)的JavaFX错误;

FXMLLoader.load(getClass().getClassLoader().getResource(";Login.fxml";)的JavaFX错误;,javafx,Javafx,我无法用我的生命来解决这个代码的问题。我在这里研究了许多类似的问题,涉及目录是否正确,可能的错误函数调用等 我希望有人能帮助我。所有内容都在一个名为loginapp的应用程序中名为login的文件中 下面是Login.java /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templ

我无法用我的生命来解决这个代码的问题。我在这里研究了许多类似的问题,涉及目录是否正确,可能的错误函数调用等

我希望有人能帮助我。所有内容都在一个名为loginapp的应用程序中名为login的文件中

下面是Login.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package login;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Login extends Application   {

    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("Login.fxml"));
        Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Login.fxml"));
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.setTitle("Fracken");
        stage.show();
    }
}
这里是Login.fxml


我相信问题出在你身上

Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("Login.fxml"));
我得到这个错误

使用平台C:\Program Files\Java\jdk1.8.0\u 111\jre/bin/Java执行C:\Users\David\Desktop\Java Project\loginapp\dist\run122343396\loginapp.jar
应用程序启动方法中的异常
线程“main”java.lang.reflect.InvocationTargetException中出现异常
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于sun.launcher.launchelper$FXHelper.main(launchelper.java:767)
原因:java.lang.RuntimeException:应用程序启动方法中的异常
位于com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:917)
在com.sun.javafx.application.launchempl.lambda$launchApplication$155(launchempl.java:182)
运行(Thread.java:745)
原因:java.lang.NullPointerException:需要位置。
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3207)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3175)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3148)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3124)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3104)
在javafx.fxml.fxmloader.load(fxmloader.java:3097)
在login.login.start处(login.java:23)
在com.sun.javafx.application.launchempl.lambda$launchApplication1$162(launchempl.java:863)
位于com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
位于com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:95)
在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
位于com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
... 还有一个
Java结果:1
请帮帮我,我已经在这里看到了其他类似的问题,但没有解决办法

getClass().getResource(“Login.fxml”)
应该返回一个非空值,因为使用
Class.getResource
查找相对于类的资源。由于您似乎已将资源放置在
login
包中,因此在该包中使用资源名为
login.fxml
的类应该可以工作

由于某些原因,您没有使用传递此资源的
URL
fxmloader
。相反,你使用

getClass().getClassLoader().getResource("Login.fxml")
也就是说,您使用类加载器来加载文件。但是,类加载器不知道从中检索它的类,因此尝试在默认包中定位
Login.fxml

如果使用类加载器,则应使用完整路径,即

getClass().getClassLoader().getResource("login/Login.fxml")

我的fxml文件不在主文件夹中(也不在同一个包中)。我得到的唯一方法是使用:getClass().getResource(“/fxml/inical.fxml”)

只需添加用户库即可。javafx来自javajre lib javafx。

您可以指定:fx:controller=“login.login”
form Login.fxml

错误显示“location is required”(位置是必需的),这意味着您的fxml文件的路径是错误的。路径是什么,包括C://的绝对路径还是本地路径,如/Login/Login.fxml。我尝试了多个路径。该路径是相对于当前类位置的url。登录.fxml中的
Login.fxml
是什么包?(
fxmloader
希望它与
Login
类在同一个包中,即在
Login
中)FXML文件是部署到jar文件的吗?完整路径是C:\Users\David\Desktop\Java Project\loginnapp\src\Login\Login.FXML。我已经尝试了大多数视频的/login/login.fxml甚至绝对路径。在应用程序部署后,文件路径几乎没有任何意义(你真的认为它将能够在运行时找到
src
目录?)。FXML文件是否部署到jar文件中?谢谢。我什么都试过了,效果很好。这是一个很好的解释,解释了它为什么会起作用。非常清楚!我想补充一点,在Netbeans中,完整路径往往是packagename/file.fxml为什么/这有助于查找资源(又称:fxml文件)?为什么会有帮助?问题是fxml不在它应该在的位置;)