运行主类时,在Maven项目中,我得到:
应用程序启动方法异常
据我了解,因为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(..)
上方的行上运行了不同的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"));
对于所有控制台输出是:(显然不是预期的输出)
空
所以,我的问题是
.getResource("Main.fxml")
在这里返回null
?Main.fxml
文件?我的系统:
答案 0 :(得分:1)
我认为您的主要问题是图书馆“ ikonli”。如果尝试使用scenebuilder打开fxml,则会看到异常。我的建议是您失去这种依赖性。使用更简单的内容,例如svg图形:
在fxml按钮中>添加区域>设置区域大小>然后在样式部分中添加css属性-fx-shape>并在值中设置带引号的svg路径,即:“ M827.6 ... 122z“
接下来添加另一个css属性-fx-scale-shape>并将其值设置为true
以上内容不需要任何第三方库,您可以免费在线找到所有图标。
public MainController(){
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项目未正确设置。您应该右键单击您的项目>配置>转换为Maven项目。如果包装变成红色,则清理它们。
最后-您需要添加另一个名为Launcher的类-然后从中启动应用程序-不要从主类中删除main方法
软件包zenit.ui;
公共类启动器{
public static void main(String[] args) {
TestUI.main(args);
}
}
希望这会有所帮助!