当前位置: 首页 > 知识库问答 >
问题:

JAVAFX-加载fxml文件时不设置位置引起的异常

松德曜
2023-03-14

我正在尝试使用以下代码将我的fxml文件集成到我的项目中,

final FXMLLoader fxmlLoader =
            new FXMLLoader(this.getClass().getResource("/sample.fxml"));

Parent root = (Parent) fxmlLoader.load();

程序在第二行崩溃,引发此异常,

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157)
    at com.sun.javafx.application.LauncherImpl$$Lambda$1/1199823423.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3201)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3169)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3142)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3118)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3098)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3091)
    at FileActions.start(FileActions.java:42)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)
    at com.sun.javafx.application.LauncherImpl$$Lambda$51/970544503.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323)
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/1878510174.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
    at com.sun.javafx.application.PlatformImpl$$Lambda$49/1792840102.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
    at com.sun.javafx.application.PlatformImpl$$Lambda$48/1671111378.run(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)

Process finished with exit code 130

也试过了,

Parent root = FXMLLoader.load(getClass().getResource("../resources/sample.fxml"));
//and
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

我不知道这是否相关,但这是我的iml文件

    <?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="module-library" scope="TEST">
      <library name="JUnit4">
        <CLASSES>
          <root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.12.jar!/" />
          <root url="jar://$APPLICATION_HOME_DIR$/lib/hamcrest-core-1.3.jar!/" />
        </CLASSES>
        <JAVADOC />
        <SOURCES />
      </library>
    </orderEntry>
    <orderEntry type="library" exported="" name="commons-net-3.6" level="project" />
    <orderEntry type="library" exported="" name="hamcrest-core-1.3" level="project" />
    <orderEntry type="library" exported="" name="junit-4.12" level="project" />
  </component>
</module>

是什么原因造成的?我该如何修复它?

这里是我的项目的一个拉链,如果有人想看一下。

谢谢,

亨利

共有1个答案

盛超
2023-03-14

我看到你在使用maven和Jetbrains。当fxml文件在代码中的位置错误时,确实会出现这种异常。您正在使用Maven。Maven正在它的resources文件夹中搜索资源(如fxml文件)。maven项目的根文件夹就是pom.xml所在的地方。我将其引用为{mavenRoot}。假设您的fxml文件位于以下路径:

{mavenRoot}/src/main/resources/fxml/sample.fxml

然后可以使用以下两行设置fxml加载器:

FXMLLoader loader1 = new FXMLLoader();
loader1.setLocation(getClass().getResource("/fxml/sample.fxml"));

在maven项目中,getResource()将搜索{mavenRoot}/src/main/resources文件夹。

 类似资料:
  • 刚接触javaFx并希望使用scenebuilder进行GUI开发时,我遇到了一个问题,在网站上或整个web上搜索我的问题时都没有运气,尽管有人问过类似的问题,认为可能需要一个不同的视角。我试图在快速构建之后通过Netbeans加载一个FXML文件,以测试功能,这样代码就简单了,但是我无法在控制器中设置根文件。我的代码是下面的公共类Divergex extends Application{ 我尝试

  • 我一直在做一个桌面应用程序,在那里我需要使用JavaFX。我在使用Scene Builder构建的eclipse上的JavaFX项目中创建了各种FXML文件。除了这个讨厌的文件(fxmlimglist.FXML)外,我加载任何FXML文件都没有问题。 其主要思想是,当按下一个按钮时,会出现一个新窗口。下面是该按钮的事件处理程序的代码: package explorer中的项目如下所示: https

  • 问题内容: 我是javaFx的新手,并且希望使用scenebuilder进行GUI开发,尽管遇到了类似的问题,但仍可能需要不同的观点,但我遇到了一个问题,尽管在网站或Web上搜索我的运气都不好。我试图在快速构建以测试功能后通过Netbeans加载FXML文件,以便代码简单,但是我无法在控制器中设置根文件。我的代码是以下公共类Divergex扩展的Application { 我尝试过将fxroot更

  • 问题内容: 我正在尝试加载FXML文件并将其显示为应用程序窗口,但出现异常。FXML文件是由FXML Scene Builder创建的。 这是班级的代码 和FXML文件 这是我得到的例外 我究竟做错了什么? 问题答案: 如果无法在运行时类路径(而不是当前目录等)上找到资源,则简短答案是静默返回。 因此,这取决于你的IDE项目设置,如果你使用的是eclipse,请尝试添加运行配置中的文件夹。 一些想

  • 我试图加载FXML文件并将其显示为应用程序窗口,但出现异常。FXML文件是由FXML场景生成器创建的。 这是这门课的代码 和FXML文件 这是我得到的一个例外 我做错了什么? p、 这是项目结构

  • 我昨天提出了一个类似的问题,但我认为它没有得到很好的解释,所以我想再问一遍,但我在代码中做了一些修改。如果我写得太多,我会道歉,但我想让一切都能理解。 这是我试图使其工作的代码(位于main controller中): getCantidad是我的bag控制器中的一个函数,它是: 所以当我尝试从主控制器运行这个函数时,它返回给我空指针异常。这意味着标签没有初始化,但当我键入第一个文件中的所有资源都