Java 使用控制器运行application@FXML bind时出现异常

Java 使用控制器运行application@FXML bind时出现异常,java,javafx,fxml,Java,Javafx,Fxml,我在SceneBuilder中添加了标记@FXML,并在userid的textfield中添加了fx:id,在userpassword中添加了passwordfield。 登录控制器 @FXML private TextField userid; @FXML private PasswordField userpassword; 并在启动应用程序时输出: Executing /home/wolacinio/Dokumenty/Programowanie/Jva/Marks/dist/run14

我在SceneBuilder中添加了标记@FXML,并在userid的textfield中添加了fx:id,在userpassword中添加了passwordfield。 登录控制器

@FXML
private TextField userid;
@FXML
private PasswordField userpassword;
并在启动应用程序时输出:

Executing /home/wolacinio/Dokumenty/Programowanie/Jva/Marks/dist/run141945473/Marks.jar using platform /usr/lib/jvm/java-8-openjdk-amd64/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$1(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: 
file:/home/wolacinio/Dokumenty/Programowanie/Jva/Marks/dist/run141945473/Marks.jar!/marks/login.fxml:27

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at marks.Marks.start(Marks.java:22)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$5(GtkApplication.java:139)
    ... 1 more
Caused by: java.lang.IllegalArgumentException: Can not set javafx.scene.control.PasswordField field marks.loginController.userpassword to javafx.scene.control.TextField
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
    at java.lang.reflect.Field.set(Field.java:764)
    at javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1163)
    at javafx.fxml.FXMLLoader.access$1600(FXMLLoader.java:103)
    at javafx.fxml.FXMLLoader$ValueElement.processValue(FXMLLoader.java:857)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:751)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
    ... 17 more
Exception running application marks.Marks
Java Result: 1

在我看来,一切都很好。有什么问题吗

代码的问题是

java.lang.IllegalArgumentException: Can not set javafx.scene.control.PasswordField field marks.loginController.userpassword to javafx.scene.control.TextField
在控制器中,您提到了userpassword作为PasswordField,其中在FXML中声明为

 <TextField fx:id="userpassword" GridPane.columnIndex="1" GridPane.rowIndex="2" />

映射时,两者应为相同的类型,否则将得到相同的异常


谢谢

您的代码的问题是

java.lang.IllegalArgumentException: Can not set javafx.scene.control.PasswordField field marks.loginController.userpassword to javafx.scene.control.TextField
在控制器中,您提到了userpassword作为PasswordField,其中在FXML中声明为

 <TextField fx:id="userpassword" GridPane.columnIndex="1" GridPane.rowIndex="2" />

映射时,两者应为相同的类型,否则将得到相同的异常


谢谢

这是您的错误:无法将javafx.scene.control.PasswordField标记.loginController.userpassword设置为javafx.scene.control.TextField。您可以向我们展示您的FXML代码以及任何其他Java代码吗?似乎您正在尝试将PasswordField设置为TextField。。。请补充您的实际问题,谢谢。您的fxml控件中的ID是错误的。在文本字段中设置fx:id=“userid”,在密码字段中设置fx:id=“userpassword”。那么它应该起作用了。更新你的问题,如千层面所问:)非常感谢。FXML文件中的fx:id错误。这是您的错误:无法将javafx.scene.control.PasswordField标记设置为javafx.scene.control.TextField。您可以向我们展示您的FXML代码以及任何其他Java代码吗?似乎您正在尝试将PasswordField设置为TextField。。。请补充您的实际问题,谢谢。您的fxml控件中的ID是错误的。在文本字段中设置fx:id=“userid”,在密码字段中设置fx:id=“userpassword”。那么它应该起作用了。更新你的问题,如千层面所问:)非常感谢。FXML文件中的fx:id错误。