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

从bin文件夹以外的文件夹加载fxml文件时出错

阎英朗
2023-03-14

我是一个相当新的java程序员。我只有大约五周的经验,从零开始,如果在Scene Builder中创建的javafx fxml文件与controller类不在同一个文件夹中,我就会遇到问题,无法正确加载这些文件。

我正在使用

Win7x64 running jre7x86 for this build

Eclipse Juno Service Release 1
Build id: 20120920-0800

jre version 1.7.0_07

javaFx version 2.2.1-b03

SceneBuilder version 1.0-b50
private static final String RESOURCE_PATH = "/resources/";
public static Stage buildStage(@SuppressWarnings("rawtypes") Class pClass,
         String stageTitle, String resourceLocation)
   {
      Stage temp = new Stage();
      Pane page = null;
      try
      {
         page = FXMLLoader.load(pClass.getResource(RESOURCE_PATH + resourceLocation), null,
               new JavaFXBuilderFactory());
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
      Scene scene = new Scene(page);
      temp.setScene(scene);
      temp.setTitle(stageTitle);
      temp.setResizable(false);
      return temp;
   }
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:403)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2737)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2721)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2707)
    at outofunit.system.StageFactory.buildStage(StageFactory.java:32)
    at outofunit.desktop.ArcMaster.start(ArcMaster.java:28)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:206)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    ... 1 more

我试着自己研究这个问题,但我没有得到太多,这里的几个答案似乎相似,似乎没有帮助,或者我太密集和/或没有经验,弄不明白它们的意义。它们是JavaFX2.0加载带有事件处理程序的fxml文件失败和JavaFX2.0fxml资源加载错误

我的一个朋友通过使用以下代码解决了这个问题

public void load(String pFileName, Stage pStage, String pTitle)
   {
      String fName = RESOURCE_PATH + pFileName;

      try
      {
         String externalForm = getClass().getResource(fName)
            .toExternalForm();

         InputStream inStream = new URL(externalForm).openStream();

         FXMLLoader loader = new FXMLLoader();
         Pane p = (Pane)loader.load(inStream);

         pStage.setTitle(pTitle);
         pStage.setScene(new Scene(p));

         mWindowControl = loader.getController();
         mWindowControl.setUp(pStage);

         pStage.show();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }

最大的区别和我没有使用他的代码的原因是因为我的根窗格是锚窗格而不是普通窗格,他的方式URL instream强制使用普通窗格。我没有使用普通窗格作为我的基板有错吗?我希望你们能给我任何帮助和投入。谢谢你。

private final String RESOURCE_PATH = "resources/";
public void load(String pFileName, Stage pStage, String pTitle)
   {
      String fName = RESOURCE_PATH + pFileName;

      Pane page = null;

      FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(fName));

      try
      {
         page = (Pane) fxmlLoader.load();
      }
      catch (IOException exception)
      {
         throw new RuntimeException(exception);
      }

      Scene scene = new Scene(page);
      pStage.setScene(scene);
      pStage.setTitle(pTitle);

      mWindowControl = fxmlLoader.getController();
      mWindowControl.setUp(pStage);

      pStage.show();
   }
java.lang.IllegalStateException: Location is not set.
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2021)
    at outofunit.desktop.WindowLoader.load(WindowLoader.java:136)
    at outofunit.desktop.WindowLoader.load(WindowLoader.java:62)
    at outofunit.desktop.ArcMaster.start(ArcMaster.java:30)
    at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
    at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:206)
    at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:173)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
    at java.lang.Thread.run(Unknown Source)

共有1个答案

羊舌庆
2023-03-14

两个例外都说“在您提供的位置中找不到您试图加载的(FXML)文件”。您的文件名或路径错误。给出包结构或至少包含load(String pFileName,stagepstage,String pTitle)方法的类文件的路径,以及要加载的FXML文件的路径。阅读getResource()的javadoc API,并在网上查看有关它的示例代码。

 类似资料:
  • 我从我的IntelliJ Java 15 Gradle项目的resources文件夹中的子文件夹加载文件时遇到问题...

  • 我正在从事一个JavaFX8(maven)项目。我想在sources(而不是resources)文件夹中存储一个fxml文件 当我将fxml存储到location/src/main/resources/views/b/MyFxml时。fxml我使用命令加载它时没有错误, 有没有办法从/src/main/java/package/name/RoleView加载我的fxml文件。fxml位置?

  • 我正在处理一个JavaFX8(maven)项目。我想在sources(而不是resources)文件夹中存储fxml文件。 当我将fxml存储到位置/src/main/resources/views/b/myfxml.fxml时, 有没有办法从/src/main/java/package/name/roleview.fxml位置加载我的fxml文件?

  • 我目前正在制作一个Minecraft Mod Loader。 正如您在上面看到的,我有一个名为Client的类。当Minecraft游戏启动时,启动被调用。现在我有一个名为Mods的文件夹,在调用startup时,我需要将Mods从Mods文件夹加载到ArrayList命名模块中。更深入地说,每个Mod将有一个继承这个模块类的主类 因此,在调用startup时,我需要遍历mods文件夹中的每个Mo

  • 问题内容: 我如何返回一个包含该文件夹中的所有文件以及子文件夹的文件数组,我的方法仅适用于该文件夹,并且不包括子文件夹。 问题答案: 使用您当前的代码,进行以下调整:

  • 我在我的android应用程序中有一个webview,加载的html文件在服务器上,但是我需要从应用程序的资产文件夹地址一些文件。我想问一下如何处理这些文件。 谢谢