我想知道是否有人可以帮助我解决在JavaFX中创建后台线程的相当烦人的问题!我目前有几个SQL查询将数据添加到当前在JavaFX应用程序线程上运行的UI(参见下面的示例).但是,当每个查询执行时,它会冻结UI,因为它不在后台线程上运行.我已经查看了使用Task的各种示例,并了解它们,但是在进行数据库查询时我无法使它们工作,其中一些需要几秒钟才能运行.
以下是执行查询的方法之一:
public void getTopOrders() {
customerOrders.clear();
try {
Connection con = DriverManager.getConnection(connectionUrl);
//Get all records from table
String SQL = "EXEC dbo.Get_Top_5_Customers_week";
ResultSet rs;
try (Statement stmt = con.createStatement();) {
rs = stmt.executeQuery(SQL);
while (rs.next()) {
double orderValue = Double.parseDouble(rs.getString(3));
customerOrders.add(new CustomerOrders(rs.getString(1),
rs.getString(2), "£" + formatter.format(orderValue),
rs.getString(4).substring(6, 8) + "/" +
rs.getString(4).substring(4, 6) + "/" +
rs.getString(4).substring(0, 4)));
}
}
} catch (SQLException | NumberFormatException e) {
}
}
Run Code Online (Sandbox Code Playgroud)
每个已处理的记录都会添加到ObservableList中,该ObservableList链接到TableView或图表,或者只是在标签上设置文本(取决于查询).如何在后台线程上执行查询,仍然可以自由使用接口并从查询中更新
提前致谢