2014-04-07 21 views
7

Tôi gặp vấn đề mà tôi hoàn toàn không thể tự mình giải quyết được vì tôi mới bắt đầu sử dụng JAVA FX. Tôi nhận được một javafx.fxml.LoadException khó chịu:, nhưng tôi đã làm chính xác như một hướng dẫn, nhưng tôi không thể có được chính của tôi để chạy. Đây là đầu ra ngoại lệ:FXML Tải ngoại lệ

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<ActionEvent>() { 

      public void handle(ActionEvent e) { 
       System.out.println("This button works"); 
      } 
     }); 
     } 
    } 

LoginGUI.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> 

và 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); 
     } 
    } 

} 
+0

Vui lòng dịch: Bearbetningsinstruktionens målmatchning "[xX] [mM] [lL]" è inte tillåten. – Puce

+0

Không thể cho phép kết quả đối sánh hướng dẫn xử lý ........ Và ngay từ đầu: ALLVARLIG: null = SERIOUS: null – jabbeboy

+1

Không chắc chắn đây là vấn đề, nhưng phương pháp chính là không bình thường. Bạn chỉ có thể làm 'launch (args);'. Dù bạn làm gì, mặc dù, đi qua trong một tài liệu tham khảo null cho mảng args là một ý tưởng khá xấu. 'Application.launch (Main.class, new String [0]);' sẽ an toàn hơn nhiều nếu bạn muốn (vì một lý do nào đó) buộc nó bỏ qua các đối số dòng lệnh. –

Trả lời

11

Vấn đề là ở chua ce

Vì vậy, bạn phải thay đổi nó thành một hợp một

Vì vậy, làm điều đó, chỉnh sửa mã nguồn của tập tin fxml đây

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

với điều này một

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

Tôi cũng gặp phải sự cố này. Tôi thấy rằng tôi đã không thêm tên gói vào tên bộ điều khiển được đưa ra trong tệp FXML; Ban đầu tôi chỉ thêm tên lớp Controller. Ví dụ: nếu lớp điều khiển của tôi dưới com.stackoverflow.gui gói và tên của lớp điều khiển của tôi là LoginController. Tệp FXML phải có com.stackoverflow.gui.LoginController và không chỉ LoginController

Các vấn đề liên quan