2012-07-28 25 views
6

Tôi đang sử dụng Lớp tác vụ để chạy tác vụ nền trong ứng dụng javafx để tìm nạp dữ liệu từ cơ sở dữ liệu.Cách sử dụng giá trị trả về của phương thức gọi của lớp Nhiệm vụ trong 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; 
} 

}

Làm thế nào để sử dụng các đối tượng dữ liệu.

Trả lời

12

Liên kết với nhiệm vụ value property HOẶC cung cấp một bộ xử lý sự kiện task.setOnSucceeded() và gọi task.getValue() trong trình xử lý sự kiện được cung cấp.

+2

Có ví dụ nào về cách thực hiện việc này không? –

+0

chỉ onSucceeded trả về giá trị hoặc onCanceled/onFailed? Tôi tự hỏi nếu tôi hủy bỏ nhiệm vụ làm thế nào để có được giá trị hiện tại trả lại nhưng không chắc chắn nếu ràng buộc là cách duy nhất. cảm ơn – Ewoks

+0

[setOnSucceeded] (https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html#setOnScheduled-javafx.event.EventHandler-) không liên quan gì đến giá trị của nhiệm vụ, nó chỉ là một trình xử lý sự kiện được thực thi khi nhiệm vụ thành công. Nếu bạn muốn nhận được giá trị tương ứng, thì bạn có thể thực thi [task.getValue()] (https://docs.oracle.com/javase/8/javafx/api/javafx/concurrent/Task.html#getValue--) trong phần xử lý sự kiện (như câu trả lời của marc cho câu hỏi này). – jewelsea

20

Ví dụ 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(); 
    } 
}); 

Ví dụ 2 setOnSucceeded

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

Ví dụ 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); 
     } 
    } 
}); 
Các vấn đề liên quan