找不到JavaFX Netbeans FXML

时间:2016-12-17 07:06:20

标签: javafx

大家好我正在学习javafx并且我有问题运行hello world的简单基本程序我知道javafx工作在MVC类型结构中fxml,mainclass和controller所以我正在做的是我刚刚创建了第一个程序在JavaFX中,有三件事情是HelloWorld.Java,HelloWorld.fxml和HelloWorldController.java,并为HelloWorld.fava创建一个com.bean包,为HelloWorld.fxml创建一个com.bean包,为HelloWorldController.java创建一个com.controller但我是在我运行它时面临一个问题它显示了一个异常,fxml没有加载一个位置是必需的.....请帮助我也很多次bild和清理它但不工作.....

HelloWorld.java

    package com.bean;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


/**
 *
 * @author Love Poet
 */
public class HelloWorld extends Application{

    @Override
    public void start(Stage stage) throws Exception {
        Parent root=FXMLLoader.load(this.getClass().getResource("com/gui/HelloWorld.fxml"));
        Scene scene=new Scene(root);
        stage.setTitle("Hellow World Example");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String args[])
    {
        launch(args);
    }
}

HelloWorldController.java

    package com.controller;

/**
 * Sample Skeleton for 'HelloWorld.fxml' Controller Class
 */

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;

public class HelloWorldController implements Initializable{
    @FXML // fx:id="button"
    private Button button; // Value injected by FXMLLoader

    @FXML // fx:id="label"
    private Label label; // Value injected by FXMLLoader

    @FXML
    void handleButtonAction(ActionEvent event) {
        label.setText("Hello World !");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {

    }
}

HelloWorld.fxml

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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import com.controller.*?>
<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="HelloWorldController">
    <children>
        <Button fx:id="button" layoutX="47.0" layoutY="129.0" onAction="#handleButtonAction" prefHeight="25.0" prefWidth="211.0" text="Click Me!" />
        <Label fx:id="label" layoutX="35.0" layoutY="35.0" minHeight="16" minWidth="69" prefHeight="45.0" prefWidth="274.0" />
    </children>
</AnchorPane>

为此我使用netbeans我的结构是: -

This is an image of netbeans project structure

1 个答案:

答案 0 :(得分:1)

您正在com.bean中使用某个类来获取资源,这意味着使用相对路径com/gui/HelloWorld.fxml会创建一个指向{{1} HelloWorld.fxml的网址包裹。

在这种情况下,您需要使用具有相同相对路径的com.bean.com.gui

ClassLoader

或使用相对于类路径根目录的路径

this.getClass().getClassLoader().getResource("com/gui/HelloWorld.fxml")