大家好我正在学习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我的结构是: -
答案 0 :(得分:1)
您正在com.bean
中使用某个类来获取资源,这意味着使用相对路径com/gui/HelloWorld.fxml
会创建一个指向{{1} HelloWorld.fxml
的网址包裹。
在这种情况下,您需要使用具有相同相对路径的com.bean.com.gui
:
ClassLoader
或使用相对于类路径根目录的路径
this.getClass().getClassLoader().getResource("com/gui/HelloWorld.fxml")