, 나는 이벤트 핸들러를 등록 할 경우 :자바 FX 작업 핸들러는 취급 자바 FX UI 노드 들어있는 스레드
final MenuItem buyItem = new MenuItem("Buy");
buyItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String symbol = row.getItem().getSymbol();
String instrumentID = row.getItem().getInstrumentID();
.....
}
);
handle()
항상 자바 FX 애플리케이션 스레드에서 실행됩니다 내부 내가 코드를 가정 할 수 있으므로 필요에가 없습니다 그들을 Platform. runLater
안에 포장하십시오.
하지만 javafx.concurrent.Task
작업 할 때 :
import javafx.concurrent.Task;
public class BuyTask extends Task<Map<String, Object>> {
......
}
BuyTask buyTask = new BuyTask(this.api, params);
Thread buyThread = new Thread(buyTask);
buyThread.start();
buyTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
Map<String, Object> result = (Map) workerStateEvent.getSource().getValue();
.......
Platform.runLater(new Runnable() {
@Override public void run() {
portfolioService.restart();
}
});
}
}
하는 스레드에서 작업의 이벤트 핸들러에서 실행? JavaFX 응용 프로그램 스레드에서 수행해야하는 perform restart on a javafx.concurrent.ScheduledService -> portfolioService.restart()
을 수행해야하므로 Platform.runLater
안에 포장합니다.
하지만 필수 항목입니까? 이 태스크 이벤트 핸들러는 JavaFX Application Thread에서도 항상 실행됩니까? 감사!
는Task
의 자바 FX 문서는 대답이
답장을 보내 주셔서 감사합니다. :) –
@firephil -이 질문과 예제를주의 깊게 읽으십시오. 이 질문은'onSucceeded' 이벤트와'onFailed' 이벤트에 관한 것입니다.이 이벤트는'Task' 클래스가 항상 JavaFX UI 스레드에서 호출합니다. 'Task' 문서에있는 예제들은'onSucceeded' 또는'onFailed' 이벤트 핸들러가 아닌 태스크의 메인 로직 내부에서 변경됩니다. – Itai