我想知道是否有人可以帮助我解决有关在JavaFX中创建后台线程的问题!我目前有几个SQL查询,这些查询将数据添加到当前在JavaFX Application Thread上运行的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) {
}
}
每个处理的记录都添加到一个ObservableList中,该ObservableList链接到TableView或图形,或者只是将文本设置在标签上(取决于查询)。我如何在后台线程上执行查询,仍然让接口可以自由使用并从查询中进行更新
提前致谢
相关分类