2017-12-23 10 views
1

Ich habe einen verwirrenden Fehler in meinem JavaFX mit FXML-Code beim Ausführen des Programms.
Ich habe drei Dateien:
Zuerst eine mit dem Namen: F2XML.fxml, die den folgenden Code enthält:
Wie löst man TARGETINVOCATIONEXCEPTION in javaFx?

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

<?import javafx.scene.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafxapplication5.FXMLDocumentController ?> 
<GridPane fx:controller = "FXMLDocumentController" hgap="10.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="100.0" prefWidth="600.0" vgap="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> 
    <columnConstraints> 
     <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
     <ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> 
    </columnConstraints> 
    <rowConstraints> 
     <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
     <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
     <RowConstraints maxHeight="20.0" minHeight="8.0" prefHeight="8.0" vgrow="SOMETIMES" /> 
     <RowConstraints maxHeight="12.0" minHeight="0.0" prefHeight="0.0" vgrow="SOMETIMES" /> 
     <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
     <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> 
    </rowConstraints> 
    <children> 
     <Label text="Choose gender:" /> 
     <RadioButton mnemonicParsing="false" text="Female" GridPane.rowIndex="2"> 
      <toggleGroup> 
       <ToggleGroup fx:id="gender" /> 
      </toggleGroup> 
     </RadioButton> 
     <RadioButton mnemonicParsing="false" selected="true" text="Male" toggleGroup="$gender" GridPane.rowIndex="1" /> 
     <Button mnemonicParsing="false" onAction="" onMouseClicked="#BClickedActionHandler" text="OK" GridPane.rowIndex="4" /> 
    </children> 
    <padding> 
     <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> 
    </padding> 
</GridPane> 

Der Name zweite Datei ist: FXMLDocumentController.java, die enthält:

package javafxapplication5; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.RadioButton; 

public class FXMLDocumentController implements Initializable { 
    @FXML 
    RadioButton Male; 
    @FXML 
    RadioButton Female; 
    @FXML 
    Button OK; 

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

    @FXML 
    public void BClickedActionHandler() { 
     System.out.println("Hello"); 
    } 

} 

Und der dritte ist: JavaFXApplication5.java die enthält:

package javafxapplication5; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

public class JavaFXApplication5 extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = null; 
     Scene scene = null; 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("F2XML.fxml")); 
     loader.setController(new FXMLDocumentController()); 
     Pane mainPane = loader.load(); 
     scene = new Scene(root); 
     stage.setScene(scene); 
     stage.show(); 

    } 

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

} 

Wenn das Programm läuft ich mit dem folgenden Code zu kämpfen hatte:

Executing D:\Java\JavaFXApplication5\dist\run1638782428\JavaFXApplication5.jar using platform C:\Program Files\Java\jdk1.8.0_151\jre/bin/java 
Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182) 
    at java.lang.Thread.run(Thread.java:748) 
Caused by: javafx.fxml.LoadException: 
file:/D:/Java/JavaFXApplication5/dist/run1638782428/JavaFXApplication5.jar!/javafxapplication5/F2XML.fxml 

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2543) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
    at javafxapplication5.JavaFXApplication5.start(JavaFXApplication5.java:23) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) 
    ... 1 more 
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,1] 
Message: Premature end of file. 
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604) 
    at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:88) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2513) 
    ... 12 more 
Exception running application javafxapplication5.JavaFXApplication5 
Java Result: 1 

kann jemand helfen in diesen Fehler zu lösen?

Antwort

0

Es sagt genau dort in dem Stack-Trace:

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,1] 
Message: Premature end of file. 

Was bedeutet, dass Ihre Eingabedatei erwartet ist nicht wie die Parser es zu sein. Laden Sie es in einen XML-Editor oder sogar Internet Explorer, um zu sehen, ob Ihre Datei gültiges XML ist.

0

werden in Methoden ausgelöst, in denen Code ausgeführt wird, der während der Kompilierzeit unbekannt ist und daher die von der Methode ausgegebenen Ausnahmen nicht in einer throws-Klausel deklariert oder beim Aufrufen abgefangen werden können. Sie müssen also den StackTrace "runter" gehen, um nach dem relevanten "Caused by" -Block zu suchen.

In diesem Fall ist es

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2,1] 
Message: Premature end of file. 

Die XML, die analysiert wird, scheint beschädigt zu sein. Ich habe den XML-Code überprüft, den Sie in Ihrer Frage angegeben haben, und dieser sieht für mich (und für den Internet Explorer, der sich im Falle eines solchen Fehlers beschweren würde) OK aus.

Stellen Sie sicher, dass die XML Sie hier bereitgestellt ist eigentlich die XML, die innerhalb der Jar-Datei befindet, wo es aus gelesen wurde, wie Sie in der Ausnahme-Block „über“ die letzte sehen:

Caused by: javafx.fxml.LoadException: 
file:/D:/Java/JavaFXApplication5/dist/run1638782428/JavaFXApplication5.jar!/javafxapplication5/F2XML.fxml 

Vielleicht haben Sie Ihre XML innerhalb des Dateisystems, aber den entsprechenden Classpath-Eintrag nach JavaFXApplication5.jar und Sie betrachten die falsche XML als Grund für den Fehler.