如何在javaFx中解决TARGETINVOCATIONEXCEPTION?

时间:2017-12-23 07:56:17

标签: java javafx fxml scenebuilder

运行程序时,我的JavaFX中出现了一个令人困惑的错误,其中包含FXML代码 我有三个文件:
第一个名为: F2XML.fxml ,其中包含以下代码:

<?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>

第二个文件名是: FXMLDocumentController.java ,其中包含:

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

}

第三个是: JavaFXApplication5.java ,其中包含:

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

}

运行程序时,我正在努力使用以下代码:

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

有人可以帮助解决此错误吗?

2 个答案:

答案 0 :(得分:0)

它就在堆栈跟踪中说:

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

这意味着您的输入文件与解析器所期望的不同。将其加载到XML编辑器甚至Internet Explorer中,以查看您的文件是否是有效的XML。

答案 1 :(得分:0)

InvocationTargetExceptions被抛出在执行代码的方法中,这些代码在编译时是未知的,因此方法抛出的异常不能在throws子句中声明或在调用时捕获。所以你必须去&#34; down&#34; stacktrace用于查找相关的&#34;由&#34; -block。

引起

在这种情况下它是

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

解析的XML似乎已损坏。我检查了你在问题中提供的XML,这对我来说是好的(对于那些在出现此类错误时会抱怨的Internet Explorer)。

确保您在此处提供的XML实际上是存放在Jar文件中的XML,您可以在上面的异常块&#34;&#34;中看到它。最后一个:

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

也许你在文件系统中有你的XML,但JavaFXApplication5.jar之后有相应的类路径条目,而你正在查看错误的XML作为错误的原因。