Java FXML 加载异常
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22914895/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
FXML Load exception
提问by jabbeboy
I got a problem that I absolutely can't solve on my own because I have just started using JAVA FX. I get a nasty javafx.fxml.LoadException: , but I have done exactly like a guide, but I cant get my Main to run. This is the the exception output:
我遇到了一个我绝对无法自己解决的问题,因为我刚刚开始使用 JAVA FX。我得到了一个令人讨厌的 javafx.fxml.LoadException: ,但我已经完全按照指南做了,但我无法让我的 Main 运行。这是异常输出:
apr 07, 2014 4:06:37 EM application.Main start
ALLVARLIG: null
javafx.fxml.LoadException:
/C:/Users/Jakob/Dropbox/java_kurser/Project%20Timeline/bin/application/LoginGUI.fxml
at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at application.Main.start(Main.java:21)
at com.sun.javafx.application.LauncherImpl.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access0(Unknown Source)
at com.sun.glass.ui.win.WinApplication.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,6]
Message: Bearbetningsinstruktionens m?lmatchning "[xX][mM][lL]" ?r inte till?ten.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source)
at javax.xml.stream.util.StreamReaderDelegate.next(Unknown Source)
... 20 more
LoginController.java
登录控制器.java
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
public class LoginController implements Initializable {
@FXML // ResourceBundle that was given to the FXMLLoader
private ResourceBundle resources;
@FXML // URL location of the FXML file that was given to the FXMLLoader
private URL location;
@FXML // fx:id="loginButton"
private Button loginButton; // Value injected by FXMLLoader
@FXML // fx:id="newUserButton"
private Button newUserButton; // Value injected by FXMLLoader
@FXML // fx:id="passwordField"
private PasswordField passwordField; // Value injected by FXMLLoader
@FXML // fx:id="usernameField"
private TextField usernameField; // Value injected by FXMLLoader
public void initialize(URL location, ResourceBundle resources) {
assert loginButton != null : "fx:id=\"loginButton\" was not injected: check your FXML file 'LoginGUI.fxml'.";
assert newUserButton != null : "fx:id=\"newUserButton\" was not injected: check your FXML file 'LoginGUI.fxml'.";
assert passwordField != null : "fx:id=\"passwordField\" was not injected: check your FXML file 'LoginGUI.fxml'.";
assert usernameField != null : "fx:id=\"usernameField\" was not injected: check your FXML file 'LoginGUI.fxml'.";
//The button event for the login button
loginButton.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent e) {
System.out.println("This button works");
}
});
}
}
LoginGUI.fxml
登录GUI.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<?import javafx.scene.text.*?>
<?scenebuilder-background-color 0x008effff?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="LoginController">
<children>
<Button fx:id="loginButton" cancelButton="false" contentDisplay="CENTER" defaultButton="true" layoutX="254.0" layoutY="263.0" mnemonicParsing="false" opacity="1.0" prefHeight="28.0" prefWidth="92.0" text="Login" underline="false">
<font>
<Font size="14.0" fx:id="x1" />
</font>
</Button>
<PasswordField fx:id="passwordField" layoutX="241.0" layoutY="206.0" prefHeight="23.000099999997474" prefWidth="118.0" promptText="Password" />
<TextField fx:id="usernameField" layoutX="241.0" layoutY="166.0" prefHeight="23.0" prefWidth="118.0" promptText="Username" />
<Label layoutX="248.0" layoutY="98.0" prefHeight="35.000099999997474" prefWidth="105.0" text="Welcome">
<font>
<Font size="22.0" />
</font>
</Label>
<Button id="loginButton" fx:id="newUserButton" cancelButton="false" contentDisplay="CENTER" defaultButton="true" font="$x1" layoutX="254.0" layoutY="313.0" mnemonicParsing="false" opacity="1.0" prefHeight="28.0" prefWidth="92.0" text="New User" underline="false" />
</children>
</AnchorPane>
and Main.java
和 Main.java
package application;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(Main.class, (java.lang.String[])null);
}
@Override
public void start(Stage primaryStage) {
try {
AnchorPane root = (AnchorPane) FXMLLoader.load(Main.class.getResource("LoginGUI.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setTitle("Bluerift Timeline");
primaryStage.show();
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
采纳答案by Ayoub
The problem is in source
问题出在源头
So, you've got to change it to a proper one
所以,你必须把它改成合适的
So do that, edit the source of the fxml file here
所以这样做,在这里编辑 fxml 文件的来源
AnchorPane root = (AnchorPane) FXMLLoader.load(Main.class.getResource("LoginGUI.fxml"));
with this one
有了这个
AnchorPane root = (AnchorPane) FXMLLoader.load(Main.class.getResource("/packagename/LoginGUI.fxml"));
回答by papigee
I experienced this issue too. I found that I did not add the package name to the controller name given in the FXML file; I initially just added the Controller class name.
For example: if my controller class is under com.stackoverflow.gui
package and the name of my controller class is LoginController
. The FXML file should have com.stackoverflow.gui.LoginController
and not just LoginController
我也遇到过这个问题。我发现我没有在FXML文件中给定的控制器名称中添加包名;我最初只是添加了控制器类名。例如:如果我的控制器类在com.stackoverflow.gui
包下并且我的控制器类的名称是LoginController
. FXML 文件应该有com.stackoverflow.gui.LoginController
,而不仅仅是LoginController
回答by Erick Cabral
I had the same problem today and for those who may have it and (like me) are looking for an answer for that:
我今天遇到了同样的问题,对于那些可能有它并且(像我一样)正在寻找答案的人:
You may have changed any component Idon your Controller file and forgot to update the Idon sceneBuilder (or FXML file)[or Vice-Versa], so the Controller can't link the component on View file.
您可能已经更改了控制器文件上的任何组件 ID,而忘记更新sceneBuilder(或 FXML 文件)[或副反面] 上的 ID,因此控制器无法链接视图文件上的组件。
For Exemple: (On Controller file)
例如:(在控制器文件上)
@FXML
Button btnName1
(On FXML file or SceneBuilder)
(在 FXML 文件或 SceneBuilder 上)
fx:id="btnName_1"
:-)
:-)