当前位置: 首页 > 知识库问答 >
问题:

JavaFx,@fxml的问题

高和通
2023-03-14

我是新来爪哇的,所以我得请你帮忙:P。我正在创建一个非常简单的程序,但我在验证密码和登录文本字段。我想知道那个代码出了什么问题,你能帮我吗?

控制器

package sample;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.PasswordField;

import java.awt.*;

public class Controller {
    @FXML
    public TextField login,password;
    public void LoginButtonClicked(ActionEvent event)
    {
    if(login.getText().equals("yes")&&password.getText().equals("yes"))
        {
            System.out.print("Congratulations");
        }
    else
        {
            System.out.print("no");
        }

    }


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

<?import javafx.scene.text.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <top>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <MenuBar>
              <menus>
                <Menu mnemonicParsing="false" text="Profile">
                  <items>
                    <MenuItem mnemonicParsing="false" text="Your Profile" />
                        <MenuItem mnemonicParsing="false" text="Log out" />
                        <MenuItem mnemonicParsing="false" text="Close" />
                  </items>
                </Menu>
                <Menu mnemonicParsing="false" text="Help">
                  <items>
                    <MenuItem mnemonicParsing="false" text="About program" />
                        <MenuItem mnemonicParsing="false" text="Author" />
                  </items>
                </Menu>
              </menus>
            </MenuBar>
            <HBox spacing="8.0">
               <children>
                  <TextField fx:id="login" promptText="User" />               // ERROR
                  <TextField fx:id="password" layoutX="10.0" layoutY="10.0" promptText="Password" />                                      //ERROR
                  <Region HBox.hgrow="ALWAYS" />
                  <Button mnemonicParsing="false" onAction="#LoginButtonClicked" text="Log In" />
                  <Button layoutX="329.0" layoutY="15.0" mnemonicParsing="false" text="Clear" />
               </children>
               <padding>
                  <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
               </padding>
            </HBox>
         </children>
      </VBox>
   </top>
   <center>
      <Label alignment="CENTER" prefHeight="130.0" prefWidth="469.0" text="Log in, in order to use this program" BorderPane.alignment="CENTER">
         <font>
            <Font size="25.0" />
         </font>
      </Label>
   </center>
</BorderPane>
Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157)
    at com.sun.javafx.application.LauncherImpl$$Lambda$1/868693306.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: 
/C:/Users/Michael/IdeaProjects/Endomondo/out/production/Endomondo/sample/sample.fxml:36

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2595)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2435)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3208)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3169)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3142)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3118)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3098)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3091)
    at sample.Main.start(Main.java:13)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)
    at com.sun.javafx.application.LauncherImpl$$Lambda$50/1482523563.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323)
    at com.sun.javafx.application.PlatformImpl$$Lambda$46/1674404664.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292)
    at com.sun.javafx.application.PlatformImpl$$Lambda$48/992465164.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291)
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/668291877.run(Unknown Source)
    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$141(WinApplication.java:102)
    at com.sun.glass.ui.win.WinApplication$$Lambda$38/1584193862.run(Unknown Source)
    ... 1 more
Caused by: java.lang.IllegalArgumentException: Can not set java.awt.TextField field sample.Controller.login 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:758)
    at javafx.fxml.FXMLLoader.injectFields(FXMLLoader.java:1155)
    at javafx.fxml.FXMLLoader.access$1600(FXMLLoader.java:104)
    at javafx.fxml.FXMLLoader$ValueElement.processValue(FXMLLoader.java:853)
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:747)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2701)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2521)
    ... 22 more

共有1个答案

端木明贤
2023-03-14

您的问题发生在Controller类的导入中:

import java.awt.*;

应该是:

import javafx.scene.control.TextField;

程序尝试将java.awt.TextField转换为javafx.scene.control.TextField

注意:不要信任IDE给您的导入:)

 类似资料:
  • 我的应用程序有选项卡式窗格,所以为了保持fxml文件的可管理性,我有一个包含选项卡的主fxml文件,并为每个其他选项卡单独设置一个fxml。这很好,但出于某种原因,应用程序已经停止加载第二个标签。我试着在主应用程序中单独加载它,效果很好。我尝试创建一个新的fxml文件作为测试,并加载它,这也是有效的。但是,它不会将其加载到第二个选项卡中。此外,控制台没有输出。 第二个: 很抱歉代码太长,并提前感谢

  • 我对使用JavaFX和FXML是非常非常陌生的,我遇到了一个问题,我无法通过反复的Google搜索或者在Stack Exchange上搜索来解决这个问题。虽然其他人也有类似的问题,但我无法在自己的项目中复制他们的解决方案。 现在,我主要是试着用FXML测试JavaFX,并对其有所了解...但是,我甚至无法加载它,因为FXMLLoader给了我以下错误。 javafx.fxml.loadExcept

  • 问题内容: 我是javaFx的新手,并且希望使用scenebuilder进行GUI开发,尽管遇到了类似的问题,但仍可能需要不同的观点,但我遇到了一个问题,尽管在网站或Web上搜索我的运气都不好。我试图在快速构建以测试功能后通过Netbeans加载FXML文件,以便代码简单,但是我无法在控制器中设置根文件。我的代码是以下公共类Divergex扩展的Application { 我尝试过将fxroot更

  • 刚接触javaFx并希望使用scenebuilder进行GUI开发时,我遇到了一个问题,在网站上或整个web上搜索我的问题时都没有运气,尽管有人问过类似的问题,认为可能需要一个不同的视角。我试图在快速构建之后通过Netbeans加载一个FXML文件,以测试功能,这样代码就简单了,但是我无法在控制器中设置根文件。我的代码是下面的公共类Divergex extends Application{ 我尝试

  • 我需要创建许多不同的FXML文件,每个文件都有一个一致的布局。每一个都有一个锚烷,可以容纳不同的内容物。 有没有办法加载一个“基本”FXML文件,然后加载第二个FXML文件,并将数据路由到第一个FXML文件? 例如,FXML#1有一个边框。FXML#2有一个按钮,文本字段,标签等。如何加载#1,然后加载#2作为#1的孩子?

  • 问题内容: 我设计了一个在jdk 7中正常工作的javafx应用程序。当我尝试在java 8中运行它时,出现以下异常: 我发现原因是在控制器类的initialize方法中,我无法在任何静态组件中使用内置方法。(例如:staticMyTextField.setText()在Java 8中引起了问题,但在Java 7中没有引起问题)。我无法找到javafx指南中与此有关的任何文档。有人可以提供一些想法