JavaFX开发报错:需java.awt.event.ActionEvent但提供javafx.event.ActionEvent
JavaFX ActionEvent类型不匹配问题修复
核心报错信息
要求传入类型:
java.awt.event.ActionEvent
实际传入类型:javafx.event.ActionEvent
已做排查操作
- 按IDEA提示将
actionEvent类型迁移为ActionEvent,操作后报错未消失 - 尝试IDEA第二项修复建议:将参数
actionEvent的类型修改为ActionEvent,此时弹出Super Method Found提示窗口,仅支持「修改jdbc jar包内基方法」「修改当前方法」两个选项,无法解决问题 - 调整代码中标注为"this import statement"的导入语句,后续按IDEA提示将重写函数改为lambda表达式后,问题回到初始报错状态
关联问题代码
package sample; //import java.awt.event.ActionEvent; //this import statement import java.net.URL; import java.util.ResourceBundle; import javafx.event.ActionEvent; //this import statement import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.Label; public class LoggedInController implements Initializable{ @FXML private Button button_logout; @FXML private Label label_welcome; @FXML private Label label_super_pw; @Override public void initialize(URL location, ResourceBundle resources){ button_logout.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent actionEvent) { // 报错出现在下方代码行 DBUtils.changeScene(actionEvent, "sample.fxml", "Log In", null, null); } }); } /** * 用户登录后展示用户信息 * @param username 用户展示名 * @param super_pw 账号创建时选中的"超级密码"单选值 */ public void setUserInformation(String username, String super_pw){ label_welcome.setText("Welcome " + username + "!"); label_super_pw.setText("Your super secret password is: " + super_pw + "."); } }
问题根因
IDEA给出的所有修复建议都只针对当前报错的调用层,没有定位到真正的问题点:你自定义的DBUtils类中,changeScene方法的第一个参数类型定义错了,用了Swing UI工具包的java.awt.event.ActionEvent,而你在控制器里传入的是JavaFX UI工具包的javafx.event.ActionEvent。这是两套完全独立的UI框架,事件类互不兼容,无法直接传参。
之前弹出Super Method Found提示,是因为你尝试修改EventHandler接口的handle方法参数——这是重写接口方法,不能随意修改参数类型,改了就不符合接口规范,自然走不通。
修复步骤
- 打开项目中的
DBUtils类,找到changeScene方法的定义 - 把
DBUtils类中导入的java.awt.event.ActionEvent删除,替换为导入javafx.event.ActionEvent,同步将changeScene方法的第一个参数类型修改为javafx.event.ActionEvent - 全局检查项目代码,确保所有JavaFX相关的事件处理,都没有混用
java.awt.event包下的Swing事件类 - 如果修改后还是有假报错,点击IDEA菜单
File -> Invalidate Caches...,勾选全部选项后重启IDEA,清理错乱的索引缓存即可。
内容的提问来源于stack exchange,提问作者Recursion
相关产品推荐
相关产品推荐

