如何在Javafx中使用Task类的call方法的返回值

Dee*_*oel 10 javafx-2

我正在使用Task类在javafx应用程序中运行后台任务来从数据库中获取数据.

 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;
}
Run Code Online (Sandbox Code Playgroud)

}

如何使用数据对象.

l -*_*c l 27

例1 addEventHandler

MyResultObjectType result;
CustomTask task = new CustomTask();
task.addEventHandler(WorkerStateEvent.WORKER_STATE_SUCCEEDED, 
        new EventHandler<WorkerStateEvent>() {
    @Override
    public void handle(WorkerStateEvent t) {
        result = task.getValue();
    }
});
Run Code Online (Sandbox Code Playgroud)

例2 setOnSucceeded

MyResultObjectType result;
CustomTask task = new CustomTask();
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
    @Override
    public void handle(WorkerStateEvent t) {
        result = task.getValue();
    }
});
Run Code Online (Sandbox Code Playgroud)

例3 addListener

task.valueProperty().addListener(new ChangeListener<Task>() {
    @Override
    public void changed(ObservableValue<? extends mytype> obs, 
                        mytype oldValue, mytype newValue) {
        if (newValue != null) {
            System.out.println("Result = " + newValue);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 内部类中使用的变量应该是最终的。但是如果它是最终的,我们就不能在内部类中更改它。 (2认同)
  • @SriramKailasam我知道已经晚了,但以防万一其他人需要它,你可以使用 ``t.getSource().getValue()``` (2认同)

jew*_*sea 17

绑定到Task的value属性或提供task.setOnSucceeded()事件处理程序并在提供的事件处理程序中调用task.getValue().

  • 有什么例子怎么做? (7认同)