无法在JavaFX中加载FXML文件

时间:2014-01-15 00:22:27

标签: java javafx fxml gridpane

因此我正在尝试为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();
}

}

究竟是什么导致它崩溃?

2 个答案:

答案 0 :(得分:0)

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

要修复它,我只是注释掉了“Insets”条目:     

答案 1 :(得分:0)

Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));

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

<GridPane fx:controller="fxmlexample.FXMLExampleController"

在这里,我可以看到fxmlexample是您的FXML文件的名称。只需删除_即可解决问题,您的代码就可以了。