我有一个任务应该返回一个 SomeObject
从数据库:
public final class LoadTask extends Task<List<SomeObject>> {
@Override
protected List<TodoTask> call() throws InterruptedException {
List<SomeObject> list = FXCollections.observableArrayList();
list.addAll(servcie.getAllSomeObjects());
// this task take a lot of time
return list;
}
}
我用这个任务来填补 TableView
:
@FXML
private void pullData() throws InterruptedException, ExecutionException {
loadTask1 = new LoadTask();
final Thread t = new Thread(loadTask1);
t.start();
todoList.getItems().addAll(loadTask1.get());
}
当我按下执行 pullData()
整个 UI
冻结,直到我从数据库中获取所有对象。
如何修复设计以获得响应 UI
?
2条答案
按热度按时间np8igboo1#
下面是我如何做到的。基本上,我启动一个新任务,并让一个侦听器成功完成该任务。costingservice是一个到MSSQLServerDB的接口hibernate连接(通过glassfish)。该接口上的listproducts方法返回数据库中的所有产品。loadtask包含任务完成时数据库查询的结果。pricingproducttablelist是查询结果的observablelist,pricingproducttable是显示数据的tableview。代码如下:
sqyvllje2#
您可以将listview定义为字符串的listview,将任务定义为字符串的observablelist的任务。之后,只需将listview的items属性绑定到task value属性,如下所示:
这里有一个更大的例子:
希望有帮助。