对于某些耗时任务,可以将其包装在后台线程运行;
Platform.runLater(new Runnable(){
@Override
public void run() {
time_consuming_task(); //需要运行的耗时任务代码
}
});
JavaFX中处理比较耗时的任务或操作,在不阻塞UI线程的情况可以用到javafx.concurrent.Task类;Task 实现了Worker和EventTarget接口,并且继承了java.util.concurrent.FutureTask 类,Task可作为普通Runnable直接供Thread使用,也可作为Callable传递给ExecutorService。Task由 Runnable和 Future组成,因此可由Thread直接执行,以下是调用示例:
Task<String> task = new Task<String>(){
@Override
protected Integer call() throws Exception { //回调的耗时任务,返回T结果
String result = time_cosuming_work();
return result;
}
@Override
protected void running() { //线程运行状态时,可执行的代码
setMessage("running");
}
@Override
protected void succeeded() { //线程成功运行结束时,可执行的代码
setMessage("succeseded done");
}
@Override //线程运行失败时,可执行的代码
protected void failed() {
setMessage("failed");
}
}
new Thread(task).start();
new Thread(new Runnable(){
public void runnable(){
time_consuming_task();
}
}).start();
ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(new Runnable(){
public void run(){
time_consuming_task();
}
});
executor.shutdown(); /shutdownNow();