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

FXMLLoader找不到fxml文件-Maven项目

柳刚豪
2023-03-14

在Maven项目中运行main类时,我得到:

应用程序启动方法中的异常

据我所知,这是因为FXML文件无法加载。

这是文件系统层次结构

 src
    └- main
        ├- java
        |   └- zenit
        |      └- ui
        |         └- TestUI.java
        └- resources
            └- zenit
               └- ui
                  └- Main.fxml

在Eclipse(src内部)

阅读apache的maven指南和其他statck问题,下面的代码片段似乎是创建FXMLLoader并指向Main.fxml文件的正确方法。

public class TestUI extends Application {
    public void start(Stage stage) throws IOException {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));

        .
        .   // set controller, load parent, set scene etc.
        .

    }

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

但是这段代码将抛出前面声明的异常。

当我试图找出代码中异常的来源时,我发现它来自fxmloader。因此,我在上面的fxmloader=newfxmloader(..)行上运行了不同的sysout(一次一个)

    System.out.println(getClass().getResource("Main.fxml"));
    System.out.println(getClass().getResource("main/resources/zenit/ui/Main.fxml"));
    System.out.println(getClass().getResource("../../../resources/zenit/ui/Main.fxml"));

对于所有人来说,控制台输出是:(显然不是预期的输出)

无效的

所以,我的问题是,

我的系统

  • Maven:ApacheMaven3.6。0

共有1个答案

谭建章
2023-03-14

>

  • 我认为你的主要问题是图书馆“ikonli”如果尝试使用scenebuilder打开fxml,您将看到异常。我的建议是你失去那种依赖。使用更简单的工具,例如svg图形:

    >

  • 在fxml按钮中

    下一步添加另一个css属性-fx-scage-form

    以上不需要任何第三方库,您可以在网上免费找到所有图标。

    公共主控制器(){

    try {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));
        loader.setController(this);
        loader.setRoot(this);
        loader.load();
    
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    }

    控制器应扩展根容器,如下所示:

    公共类MainController扩展了VBox{

    然后在主类中把主控制器传到现场

    Scene scene = new Scene(controller);
    

    我相信你的maven项目没有正确设置。你应该右键点击你的项目

    最后一件事-您需要添加另一个类称为启动器-然后从它开始您的应用程序-不要从您的主类中删除main方法

    包装zenit。用户界面;

    公共类启动器{

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

    }

    希望这有帮助!

  •  类似资料:
    • 这是我的第一个问题,所以如果我搞错了,请原谅我,但是我有一个关于FXMLLoader的奇怪问题,我无法解释自己,所以任何提示或帮助都将非常感谢。 下面的片段是我如何将文件GraphicSettings.fxml加载到程序中的。 此代码段的输出如下: 按照我的理解,文件是在正确的位置找到的,并且它提供给FXMLLoader的URL也是正确的,但是由于某种原因,FXMLLoader找不到文件。 现在,

    • 我有一个标准的(非JavaFX)MavenJava项目。它应该做的第一件事是加载一个. fxml文件,但是我似乎无法使用找到它。 这是不寻常的,因为此项目是从标准Java项目导入的,该项目运行良好,没有错误。 以下是主要方法: URL总是返回为。 我有作为测试方法,看看URL对象是否返回为null。根据我所读到的关于的所有内容,它应该得到与调用类相同的包中的任何对象,这是。 以下是

    • 为了学习JavaFX,我使用IntelliJ IDEA创建了我的第一个项目,并将该项目导出为Eclipse项目。当我在这两个IDE中运行项目时,一切都运行得很好。不幸的是,在构建项目并尝试运行.jar或.exe文件之后,我得到了一个异常,我认为问题出在FXMLLoader中,它无法找到fxml文件。 项目层次结构

    • 我正在使用GlassFish运行最新版本的NetBeans(7.3),并且创建了一个maven web项目,该项目添加了必要的JSF2.1依赖项。我能够部署项目并访问主页。问题是,当我尝试使用“JSF pages from Entities”向导时,我得到以下错误“找不到web文件夹”。如果我试图通过“project/properties/framework”添加JSF2.1框架支持,我会得到同样

    • 我第一次尝试使用JavaFx与Maven。通过这个主题:链接IntelliJ不能识别JavaFX 11与OpenJDK 11,我配置的项目。但是无论我做什么,我都不能加载fxml文件,因为"getClass(). getResources(path)"返回null。 我更改了路径,以“/”开头,没有,更改了包,创建了包,删除了包,更改了模块信息中的引用,但这不起作用。 结构:https://ibb