问题
在运行JavaFx的时候,报了上述错误,基本就是找不到要加载资源的位置。
解决
资源需要与主类位于相同的文件夹结构中,路径上要保持一致,文件结构如下:
- src/main/java
- cc.nsurl.controllers
HelloController.java
Main.java
- src/main/resources
- cc.nsurl.controllers.fxml
hello-view.fxml
控制器和主函数最好在一个文件下面,不然也容易找不到。
HelloController.java 内容如下:
package cc.nsurl.controllers;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
public class HelloController {
@FXML
private Label welcomeText;
@FXML
protected void onHelloButtonClick() {
welcomeText.setText("Welcome to JavaFX Application!");
}
}
Main.java 内容如下:
package cc.nsurl.controllers;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.io.IOException;
public class Main extends Application {
@Override
public void start(Stage stage) throws IOException {
// 这里的位置要保持一致 "fxml/hello-view.fxml",是从fxml这里开始位置不同的
FXMLLoader fxmlLoader = new FXMLLoader(HelloController.class.getResource("fxml/hello-view.fxml"));
Scene scene = new Scene(fxmlLoader.load(), 320, 240);
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}
hello-view.fxml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.Button?>
<VBox alignment="CENTER" spacing="20.0" xmlns:fx="http://javafx.com/fxml"
fx:controller="cc.nsurl.controllers.HelloController">
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0"/>
</padding>
<Label fx:id="welcomeText"/>
<Button text="Hello!" onAction="#onHelloButtonClick"/>
</VBox>