java FXMLLoader找不到fxml文件Maven项目
在Maven项目中运行main类时,我得到:
Exception in Application start method
据我所知,这是因为FXML文件无法加载
这是文件系统层次结构
src
└- main
├- java
| └- zenit
| └- ui
| └- TestUI.java
└- resources
└- zenit
└- ui
└- Main.fxml
在Eclipse中(在src内部)
阅读apache's maven guide和other statck questions,下面的代码片段似乎是创建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);
}
}
但此代码将抛出前面声明的异常
当我试图找出代码中Exception
的来源时,我发现它是FXMLLoader
的形式。
因此,我在FXMLLoader loader = new FXMLLoader(..)
上面的行上运行了不同的系统输出(一次一个):
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"));
总之,控制台输出是:(显然不是预期的输出)
null
所以,我的问题是
为什么.getResource("Main.fxml")
在这里返回null
在这种情况下,如何正确访问Main.fxml
文件
我的系统:
- Maven:ApacheMaven 3.6.0
- Java SE:11.0.2
- JavaFX:11.0.2
- 月食:2018-12(4.10.0)
- 操作系统:macOS Mojave-v10。14.3
# 1 楼答案
我认为你的主要问题是图书馆“ikonli”如果尝试使用scenebuilder打开fxml,您将看到异常。我的建议是你失去那种依赖。使用更简单的工具,例如svg图形:
在fxml按钮中>;添加一个区域>;设置区域大小>;然后在样式部分添加css属性-fx shape>;在值中,用引号设置svg路径,即:“M827.6…122z”
接下来添加另一个css属性-fx缩放形状>;并将其值设置为true
以上内容不需要任何第三方库,您可以在网上免费找到所有图标
公共主控制器(){
}
控制器应扩展根容器,如下所示:
公共类主控制器扩展VBox{
然后在main类中,只需将主控制器传递给场景
我相信你的maven项目没有正确设置。您应该右键单击您的项目>;配置>;转换为maven项目。然后,如果包裹变红,请将其清理干净
最后一件事-您需要添加另一个名为Launcher的类-然后从中启动应用程序-不要从主类中删除main方法
包装zenit。用户界面
公共类启动器{
}
希望这有帮助