我想知道是否有人可以帮助我一个相当烦人的问题,在JavaFX中创建一个后台线程!我目前有几个SQL查询将数据添加到当前在JavaFX应用程序线程上运行的UI(请参见下面的示例)。但是,当这些查询执行时,它会冻结UI,因为它不在后台线程上运行。我查看了使用Task的各种示例并理解它们,但是在执行数据库查询时我无法让它们工作,其中一些需要几秒钟才能运行。JavaFX - SQL查询的后台线程
下面是该方法的一个执行的查询:
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) {
}
}
每个处理的记录被添加到链接到一个TableView中,或图形或简单地设置在标签上的文本的ObservableList(取决于查询)。我怎么能执行一个后台线程的查询,仍然留下自由提前使用,并从查询更新
感谢
您是否观察过javafx.concurrent包中的类? docs.oracle.com/javafx/2/api/javafx/concurrent/...。我认为,Task类应该对你特别有趣:docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html,你可以阅读它的javadoc,了解完整的选项列表。 – 2013-02-14 20:26:28
也许DataFX可以帮助您:http://www.javafxdata.org或http://www.guigarage.com/category/datafx/ – 2013-02-15 13:32:58