FXML加载exception

我遇到了一个我自己无法解决的问题,因为我刚刚开始使用JAVA FX。 我得到一个令人讨厌的javafx.fxml.LoadException :,但我完全像一个向导,但我不能让我的Main运行。 这是exception输出:

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$8.run(Unknown Source) at com.sun.javafx.application.PlatformImpl$7.run(Unknown Source) at com.sun.javafx.application.PlatformImpl$6$1.run(Unknown Source) at com.sun.javafx.application.PlatformImpl$6$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl$6.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.access$300(Unknown Source) at com.sun.glass.ui.win.WinApplication$4$1.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

 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() { public void handle(ActionEvent e) { System.out.println("This button works"); } }); } } 

LoginGUI.fxml

               

和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); } } } 

问题出在源头

所以,你必须把它改成一个合适的

这样做,在这里编辑fxml文件的来源

 AnchorPane root = (AnchorPane) FXMLLoader.load(Main.class.getResource("LoginGUI.fxml")); 

有这个

 AnchorPane root = (AnchorPane) FXMLLoader.load(Main.class.getResource("/packagename/LoginGUI.fxml")); 

我也遇到过这个问题。 我发现我没有将包名添加到FXML文件中给出的控制器名称; 我最初只是添加了Controller类名。 例如:如果我的控制器类在com.stackoverflow.gui包下,我的控制器类的名称是LoginController 。 FXML文件应该有com.stackoverflow.gui.LoginController而不仅仅是LoginController