无法在 JavaFX 中加载 FXML 文件

Posted

技术标签:

【中文标题】无法在 JavaFX 中加载 FXML 文件【英文标题】:Failed to load FXML file in JavaFX 【发布时间】:2014-02-03 07:09:08 【问题描述】:

所以我正在尝试为 JavaFX 编写教程并正在研究 FXML 示例。但是,每当我在 .fxml 文件中的 GridPane 中添加一些内容时,程序就会崩溃。如果没有其他内容,它会打开一个普通的 GridPane。

FXML 文件的代码:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<GridPane fx:controller="fxmlexample.FXMLExampleController" 
    xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<padding><Insets top="25" right="25" bottom="10" left="25"/></padding>
<Text text="Welcome" 
        GridPane.columnIndex="0" GridPane.rowIndex="0"
        GridPane.columnSpan="2"/>

    <Label text="User Name:"
        GridPane.columnIndex="0" GridPane.rowIndex="1"/>

    <TextField 
        GridPane.columnIndex="1" GridPane.rowIndex="1"/>

    <Label text="Password:"
        GridPane.columnIndex="0" GridPane.rowIndex="2"/>

    <PasswordField fx:id="passwordField" 
        GridPane.columnIndex="1" GridPane.rowIndex="2"/>
</GridPane>

主类代码:

package fxmlexample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class FXMLExample extends Application 

public static void main(String[] args) 
    Application.launch(FXMLExample.class, args);


@Override
public void start(Stage stage) throws Exception 
    Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

    Scene scene = new Scene(root, 300, 275);

    stage.setTitle("FXML Welcome");
    stage.setScene(scene);
    stage.show();

究竟是什么导致它崩溃?

【问题讨论】:

【参考方案1】:
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

上面提到的行你给了错误的 FXML 文件名(fxml_example.fxml)。

&lt;GridPane fx:controller="fxmlexample.FXMLExampleController"

在这里我可以看到 fxmlexample 是您的 FXML 文件的名称。只需通过删除 _ 来修复它,您的代码就可以了。

【讨论】:

【参考方案2】:

我正在尝试同样的事情,并将问题追踪到“Insets”条目。我的输出顶部有一个“Insets is not a valid type”错误(在我理顺了我的命名之后)。这可能取决于使用的 NetBeans 版本。 (我使用的是 7.2.1,但希望今天下午升级到 7.4。)

为了解决这个问题,我简单地注释掉了“Insets”条目:

【讨论】:

以上是关于无法在 JavaFX 中加载 FXML 文件的主要内容,如果未能解决你的问题,请参考以下文章

设置root的JavaFx FXML加载文件问题

JavaFx:打开另外一个窗体并加载WebView

访问父控制器中加载的 FXML 的元素

无法在 JavaFX 中加载图像

无法使用 Gradle 实例化 FXML 加载器

无法在 javafx 中链接 fxml 和控制器文件变量 [重复]