Javafx 2 Javafx中如何使用Task类call方法的返回值
我使用Task类在javafx应用程序中运行后台任务,从数据库中获取数据Javafx 2 Javafx中如何使用Task类call方法的返回值,javafx-2,Javafx 2,我使用Task类在javafx应用程序中运行后台任务,从数据库中获取数据 public class CustomTask extends Task<ObservableList<ObservableList>> { TableView tableview; ObservableList<ObservableList> data; public CustomTask(TableView tableview) { this
public class CustomTask extends Task<ObservableList<ObservableList>> {
TableView tableview;
ObservableList<ObservableList> data;
public CustomTask(TableView tableview) {
this.tableview = tableview;
}
@Override
protected ObservableList<ObservableList> call() throws Exception {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String SQL = "SELECT * from sell where Date='" + dateFormat.format(date) + "'";
ResultSet rs = DBConnect.getResultSet(SQL);
data = DBConnect.generateListDateFromTable(rs, true);
return data;
}
}
public类CustomTask扩展任务{
TableView TableView;
可观测数据;
公共自定义任务(TableView TableView){
this.tableview=tableview;
}
@凌驾
受保护的ObservableList调用()引发异常{
DateFormat DateFormat=新的简化格式(“yyyy-MM-dd”);
日期=新日期();
String SQL=“SELECT*from sell where Date=”+dateFormat.format(Date)+“”;
ResultSet rs=DBConnect.getResultSet(SQL);
data=DBConnect.generateListDateFromTable(rs,true);
返回数据;
}
}
如何使用数据对象。绑定到任务的或提供事件处理程序,并在提供的事件处理程序中调用Task.getValue()。示例1
addEventHandler
MyResultObjectType结果;
CustomTask任务=新建CustomTask();
task.addEventHandler(WorkerStateEvent.WORKER_状态_成功,
新的EventHandler(){
@凌驾
公共无效句柄(WorkerStateT事件){
结果=task.getValue();
}
});
示例2setonsucceed
MyResultObjectType结果;
CustomTask任务=新建CustomTask();
task.setOnSucceeded(新的EventHandler(){
@凌驾
公共无效句柄(WorkerStateT事件){
结果=task.getValue();
}
});
示例3addListener
task.valueProperty().addListener(新的ChangeListener()){
@凌驾
更改公众假期(ObservalEvalueDos just onSucceeded返回值还是onCanceled/onFailed?我想知道我是否取消任务如何获得返回的当前值,但不确定绑定是否是唯一的方法。感谢与任务的值无关,它只是任务成功时要执行的事件处理程序。如果要获得相应的值,则y您可以在事件处理程序的主体中执行(如marc对这个问题的回答)。您可以执行相同的任务。getValue()如果愿意,可以调用处理程序。根据任务的运行方式,从已取消的任务中获取值可能有意义,也可能没有意义。正如您所提到的,绑定到valueProperty也会起作用。内部类中使用的变量应该是final。但如果是final,我们无法在内部类中更改它…@SriramKailasam我知道它是l但是为了防止其他人需要,您可以使用t.getSource().getValue()