JavaFX中使用lambda表达式的方法
问题描述
我正在学习JavaFx,因此我从使用JDBC的非常基本的数据库应用程序开始。我是一名网络开发人员,我来自Javascript和Typescript背景。我试图在单击按钮时调用方法。该方法将简单地在数据库中推送一条记录。我先给你看我的代码。
AddNewBranchRecord.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交互的数据服务类。
DataService.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;
}
}
但是当我按下Done按钮时,它给了我这个例外:
线程“ JavaFX应用程序线程”中的异常java.lang.NoSuchMethodError:tasktracker.DataService.insertRecord()Z
为什么我会收到此NoSuchMethod
异常。如果我将此代码直接放在调用方类的构造函数中,则相同的代码也可以工作。是否有与synchronization相关的内容。我之所以这样想,是因为我来自Javascript和Typescript背景。我知道Java和JS是两种不同的语言。请指出我的错误。
我正在使用JDK 8
。
思路:
发生这种情况的唯一方法是如果DataService
类是在没有addRecord()
方法的情况下编译的,并且由于添加了addRecord()
方法而没有重新编译。通常,编译器会确保这种情况不会发生(通过在编译DataService
时自动重新编译AddNewBranchRecord
),但似乎不同步。
您最好的选择是删除所有生成的类文件并重新编译源代码。您的IDE应该具有“清除”和“重建”项目的选项,分别完成这些步骤。
顺便说一句,您几乎肯定不希望每次用户按下按钮时都创建一个新的DataService
(及其与数据库的连接):将调用移至lambda表达式之外的DataService
构造函数(至少;您可能希望其范围更广)。
希望小编分享的JavaFX中使用lambda表达式的方法内容大家都看明白了,如果你需要深入了解java方面的知识点,可以随时来关注爱站技术频道网站。
上一篇:自定义启动器怎么支持快捷方式固定