사용하여 Platform.runLater(...)
빠르고 간단하게 작업하고 Task
복잡하고 큰 작업.
예 : Platform.runLater(...)
긴 계산에 사용할 수없는 이유 (아래 참조에서 발췌).
문제 : 0에서 1 백만까지 계산되는 백그라운드 스레드와 UI의 업데이트 진행률 표시 줄.
다음을 사용하는 코드 Platform.runLater(...)
:
final ProgressBar bar = new ProgressBar();
new Thread(new Runnable() {
@Override public void run() {
for (int i = 1; i <= 1000000; i++) {
final int counter = i;
Platform.runLater(new Runnable() {
@Override public void run() {
bar.setProgress(counter / 1000000.0);
}
});
}
}).start();
이것은 끔찍한 코드 덩어리이며, 자연에 반하는 범죄입니다 (일반적으로 프로그래밍). 첫째,이 Runnables의 이중 중첩을 보는 것만으로도 뇌 세포를 잃게됩니다. 둘째, 작은 Runnables로 이벤트 대기열을 휩쓸 것입니다. 실제로는 백만 개입니다. 분명히, 우리는 UI와 다시 통신하는 백그라운드 워커를 더 쉽게 작성하기 위해 약간의 API가 필요했습니다.
Task를 사용하는 코드 :
Task task = new Task<Void>() {
@Override public Void call() {
static final int max = 1000000;
for (int i = 1; i <= max; i++) {
updateProgress(i, max);
}
return null;
}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
이전 코드에 나타난 결함이 없습니다.
참조 :
JavaFX 2.0의 작업자 스레딩