java.lang.reflect.InvocationTargetException 当从 TextField 获取值时 - Javafx

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26420683/
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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 02:27:47  来源:igfitidea点击:

java.lang.reflect.InvocationTargetException When get value from TextField - Javafx

javajavafxscenebuilder

提问by Mdumanoj

I am new to Javafx. I am learning Javafx by developing a simple application. I am trying go get value from TextField in javaFXML. I got java.lang.reflect.InvocationTargetException.

我是 Javafx 的新手。我正在通过开发一个简单的应用程序来学习 Javafx。我正在尝试从 javaFXML 中的 TextField 获取值。我得到了java.lang.reflect.InvocationTargetException

Javafx File.

Javafx 文件。

public class Manoj extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

        Scene scene = new Scene(root);

        stage.setScene(scene);
        stage.show();
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

FXMLDocument.fxml

FXML文档.fxml

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="480.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="manoj.FXMLDocumentController">
    <children>
      <AnchorPane layoutX="142.0" layoutY="36.0" prefHeight="361.0" prefWidth="360.0">
         <children>
            <Label fx:id="result" alignment="CENTER" contentDisplay="CENTER" layoutX="61.0" layoutY="289.0" opacity="0.51" prefHeight="77.0" prefWidth="169.0" text="Result Of Addition">
               <font>
                  <Font size="18.0" />
               </font>
            </Label>
            <Label layoutX="26.0" layoutY="108.0" prefHeight="32.0" prefWidth="90.0" text="Number#1 ">
               <font>
                  <Font size="14.0" />
               </font>
            </Label>
            <Label alignment="TOP_CENTER" contentDisplay="CENTER" text="First Application" textAlignment="CENTER">
               <font>
                  <Font name="Cambria" size="50.0" />
               </font>
            </Label>
            <Label layoutX="26.0" layoutY="155.0" prefHeight="32.0" prefWidth="90.0" text="Number#2">
               <font>
                  <Font size="14.0" />
               </font>
            </Label>
              <Button fx:id="button" alignment="CENTER" contentDisplay="CENTER" layoutX="83.0" layoutY="216.0" onAction="#addNumber" prefHeight="44.0" prefWidth="125.0" text="Add Number">
               <font>
                  <Font name="Cambria" size="14.0" />
               </font>
            </Button>
            <TextField fx:id="textone" layoutX="141.0" layoutY="108.0" prefHeight="32.0" prefWidth="179.0" />
            <TextField fx:id="texttwo" layoutX="141.0" layoutY="155.0" prefHeight="32.0" prefWidth="179.0" />
         </children>
         <padding>
            <Insets bottom="20.0" left="20.0" right="20.0" />
         </padding>
      </AnchorPane>
    </children>
   <padding>
      <Insets top="20.0" />
   </padding>
</AnchorPane>

FXMLDocumentController.java

FXMLDocumentController.java

public class FXMLDocumentController implements Initializable {

    @FXML
    private Label result;
    private TextField textone;

    public FXMLDocumentController() {

    }
    @FXML
    private void addNumber(ActionEvent event) {
        System.out.println("Clicked. !");
        String str = textone.getText();
        result.setText(str);
    }

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

}

I am developing using netbeans with scene builder. When I run this project and click Add Number button, I got an exception.

我正在使用带有场景构建器的 netbeans 进行开发。当我运行此项目并单击“添加编号”按钮时,出现异常。

Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1768)
    at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1651)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Node.fireEvent(Node.java:8175)
    at javafx.scene.control.Button.fire(Button.java:185)
    at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase.handle(BehaviorSkinBase.java:96)
    at com.sun.javafx.scene.control.skin.BehaviorSkinBase.handle(BehaviorSkinBase.java:89)
    at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
    at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
    at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
    at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
    at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
    at javafx.event.Event.fireEvent(Event.java:204)
    at javafx.scene.Scene$MouseHandler.process(Scene.java:3746)
    at javafx.scene.Scene$MouseHandler.access00(Scene.java:3471)
    at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1695)
    at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2486)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:314)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:243)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:345)
    at com.sun.glass.ui.View.handleMouseEvent(View.java:526)
    at com.sun.glass.ui.View.notifyMouse(View.java:898)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.access0(WinApplication.java:39)
    at com.sun.glass.ui.win.WinApplication.run(WinApplication.java:112)
    at java.lang.Thread.run(Thread.java:745)
Caused by: 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:483)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
    at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1763)
    ... 47 more
Caused by: java.lang.NullPointerException
    at manoj.FXMLDocumentController.addNumber(FXMLDocumentController.java:33)
    ... 57 more

Please help me to get out of this exception. Thanks in advance.

请帮我摆脱这个例外。提前致谢。

采纳答案by Mdumanoj

Thanks for your comment Jose Pereda.

感谢您的评论Jose Pereda

Just a simple careless mistake. As Jose Peredasaid, I added @FXML annotation for textoneand it worked fine.

只是一个简单粗心的错误。正如Jose Pereda所说,我为textone它添加了 @FXML 注释并且效果很好。

回答by nelka

package net.remark.abs.invoice;

import java.util.Date;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import net.remark.abs_bos.Invoice;
import net.rojer.core.db.DataBase;
import net.rojer.javafx.tool.Tools;

public class FrameInvoice extends AnchorPane{

    @FXML 
    private TextField fldInvoiceNumber;

    @FXML
    private Label lblPrice;

    public FrameInvoice(){
        Tools.innitiateFxml(this);

    }

    @FXML
    private void  onSave (ActionEvent event){
        Invoice invo = new Invoice();
        invo.setDate(new Date());
        invo.setTotal(0);
        invo.setStat((true));
        DataBase.begin();
        DataBase.em().persist(invo);
        DataBase.commit();
        System.out.println("true");
    }   
}

回答by Hemantha

I have seen many posts regarding this error and many of them get failed.For me it was the same. try to make the fxml file again and let the IDE to create the controller and css. keep the default controller and css names as it is and attach newly created '.fxml' file to the code. For me It worked.copy the content from the scene builder ,but not by the xml code.

我看过很多关于这个错误的帖子,其中很多都失败了。对我来说也是一样。尝试再次制作fxml文件并让IDE创建控制器和css。保持默认的控制器和 css 名称不变,并将新创建的“.fxml”文件附加到代码中。对我来说它有效。从场景构建器复制内容,但不是通过 xml 代码。