如何使用 JavaFX 服務
而不是將密集型任務執行到 JavaFX Thread
中,而這應該被完成到一個 Service
.So 什麼基本上是一個服務 ?
服務是一個每次啟動時建立一個新的 Thread
的類,並且正在將一個任務傳遞給它來做一些工作。服務可以返回或不返回值。
下面是 JavaFX 服務的一個典型示例,它正在做一些工作並返回一個
Map<String,String>(
):
public class WorkerService extends Service<Map<String, String>> {
/**
* Constructor
*/
public WorkerService () {
// if succeeded
setOnSucceeded(s -> {
//code if Service succeeds
});
// if failed
setOnFailed(fail -> {
//code it Service fails
});
//if cancelled
setOnCancelled(cancelled->{
//code if Service get's cancelled
});
}
/**
* This method starts the Service
*/
public void startTheService(){
if(!isRunning()){
//...
reset();
start();
}
}
@Override
protected Task<Map<String, String>> createTask() {
return new Task<Map<String, String>>() {
@Override
protected Void call() throws Exception {
//create a Map<String, String>
Map<String,String> map = new HashMap<>();
//create other variables here
try{
//some code here
//.....do your manipulation here
updateProgress(++currentProgress, totalProgress);
}
} catch (Exception ex) {
return null; //something bad happened so you have to do something instead of returning null
}
return map;
}
};
}
}