2012-07-28 41 views
6

javafxアプリケーションでバックグラウンドタスクを実行してデータベースからデータをフェッチするためにTaskクラスを使用しています。JavafxのTaskクラスの呼び出しメソッドの戻り値の使い方

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; 
} 

}

データオブジェクトを使用する方法。

答えて

12

タスクのvalue propertyにバインドするか、task.setOnSucceeded()イベントハンドラを用意し、提供されたイベントハンドラでtask.getValue()を呼び出します。

+2

これを行う方法の例はありますか? –

+0

onSucceededはvalueまたはonCanceled/onFailedを返しますか?現在の値を返す方法を取り消すかどうかは分かりますが、バインディングが唯一の方法であるかどうかはわかりません。ありがとう – Ewoks

+0

[setOnSucceeded](https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html#setOnScheduled-javafx.event.EventHandler-)の値は、タスクは、タスクが成功したときに実行される単なるイベントハンドラです。対応する値を取得するには、[task.getValue()](https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html#getValue--)を実行します。 )(この質問に対するmarcの回答のように)イベントハンドラの本体にあります。 – jewelsea

20

例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(); 
    } 
}); 

例2 setOnSucceeded

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

例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); 
     } 
    } 
}); 
関連する問題