Java 加载 FXML 时解析“onAction”时出错

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

Error resolving "onAction" while loading FXML

javajavafxjavafx-8

提问by DesolateTen

I'm having some issues getting a simple hello world application to run. It is throwing the following error:

我在运行一个简单的 hello world 应用程序时遇到了一些问题。它抛出以下错误:

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:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication2(LauncherImpl.java:182)
    at com.sun.javafx.application.LauncherImpl$$Lambda/1329552164.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: Error resolving onAction='#printHello', either the event handler is not in the Namespace or there is an error in the script.
/home/willi/java/IdeaProjects/JavaFXApp/out/production/JavaFXApp/sample/sample.fxml:23

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
    at javafx.fxml.FXMLLoader.access0(FXMLLoader.java:104)
    at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:606)
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:766)
    at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2827)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2536)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2445)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3218)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3179)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3152)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3128)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3108)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3101)
    at sample.Main.start(Main.java:13)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication19(LauncherImpl.java:863)
    at com.sun.javafx.application.LauncherImpl$$Lambda/2085742749.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait2(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl$$Lambda/738441956.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null0(PlatformImpl.java:295)
    at com.sun.javafx.application.PlatformImpl$$Lambda/689939224.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater1(PlatformImpl.java:294)
    at com.sun.javafx.application.PlatformImpl$$Lambda/1382865734.run(Unknown Source)
    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(GtkApplication.java:139)
    at com.sun.glass.ui.gtk.GtkApplication$$Lambda/704249306.run(Unknown Source)
    ... 1 more

My Controller.java file has the methods printHelloand printWorlddefined in them, and I would like to call them when I press their corresponding buttons. The code is as follows: package sample;

我的 Controller.java 文件有方法printHelloprintWorld在其中定义,当我按下相应的按钮时,我想调用它们。代码如下: 封装示例;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import java.awt.event.ActionEvent;

public class Controller {

    @FXML
    private Button helloButton;

    @FXML
    private Button worldButton;

    @FXML
    private void printHello(ActionEvent e){
        System.out.println("Hello");
    }

    @FXML
    private void printWorld(ActionEvent f){
        System.out.println("World");
    }
}

` In my fxml file, I have two buttons defined. Their code is as follows:

` 在我的 fxml 文件中,我定义了两个按钮。他们的代码如下:

<Button fx:id="helloButton" layoutX="46.0" layoutY="87.0" mnemonicParsing="false" onAction="#printHello" text="Hello" />

<Button fx:id="worldButton" layoutX="97.0" layoutY="87.0" mnemonicParsing="false" onAction="#printWorld" text="World" />

Why is my code throwing this error?

为什么我的代码会抛出这个错误?

Sorry in advance for the terrible formatting, this is my first time posting.

预先为糟糕的格式感到抱歉,这是我第一次发帖。

采纳答案by Uluk Biy

You have imported wrong ActionEventin controller class.

ActionEvent在控制器类中导入了错误。

import java.awt.event.ActionEvent;

Correct it to

更正为

import javafx.event.ActionEvent;