[英]How to call a method on an action event using lambda expression in JavaFX
我正在学习 JavaFx,所以我从一个使用 JDBC 的非常基本的数据库应用程序开始。 我是一名网络开发人员,我来自 Javascript 和 Typescript 背景。 我正在尝试通过单击按钮来调用方法。 该方法将简单地在数据库中推送一条记录。 我先给你看我的代码。
添加NewBranchRecord.java
public class AddNewBranchRecord {
public static void askInitialDetails() {
Scene scene;
final Stage stage = new Stage();
Button doneButton;
...
doneButton = new Button("Done");
doneButton.setOnAction(e -> {
DataService dataservice = new DataService();
dataservice.insertRecord();
});
...
stage.setTitle("INITIAL DETAILS");
stage.setScene(scene);
stage.showAndWait();
}
}
这是将与 oracle 交互的数据服务类。
数据服务.java
public class DataService {
Connection con;
Statement stmt;
DataService() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","tiger","scott");
stmt=con.createStatement();
}
catch(Exception e){
System.out.println(e);
}
}
public int insertRecord() {
int success = 0;
try {
success=stmt.executeUpdate("insert into emp values(2, 'Tanzeel')");
} catch (SQLException ex) {
Logger.getLogger(DataService.class.getName()).log(Level.SEVERE, null, ex);
}
return success;
}
}
但是当我按下“完成”按钮时,它给了我这个例外:
线程“JavaFX 应用程序线程”中的异常 java.lang.NoSuchMethodError: tasktracker.DataService.insertRecord()Z
为什么我会收到此NoSuchMethod
异常。 如果我将此代码直接放入调用者类的构造函数中,则相同的代码有效。 是否有与同步相关的东西。 我是这样想的,因为我来自 Javascript 和 Typescript 背景。 我知道 Java 和 JS 是两种不同的语言。 请指出我的错误。
我正在使用JDK 8
。
发生这种情况的唯一方法是,如果DataService
类是在没有addRecord()
方法的情况下编译的,并且在添加了addRecord()
方法后没有重新编译。 通常,编译器会确保不会发生这种情况(通过在编译AddNewBranchRecord
时自动重新编译DataService
),但不知何故似乎事情不同步了。
最好的办法是删除所有生成的类文件并重新编译源代码。 您的 IDE 应该可以选择“清理”和“重建”项目,以分别完成这些步骤。
DataService
一句,您几乎肯定不希望每次用户按下按钮时都创建一个新的DataService
(连接到数据库):将调用移动到 lambda 表达式之外的DataService
构造函数(至少;您可以希望它的范围更广)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.