JavaFX的同步机制(三)

2014-11-24 11:47:27 · 作者: · 浏览: 66
return new Task() {
protected String call()
throws IOException, MalformedURLException {
String result = null;
BufferedReader in = null;
try {
URL u = new URL(_url);
in = new BufferedReader(
new InputStreamReader(u.openStream()));
result = in.readLine();
} finally {
if (in != null) {
in.close();
}
}
return result;
}
};
}
}
}
WorkerStateEvent类和状态转换
无论何时Worker实现的状态改变,定义于WorkerStateEvent类的相应事件将会发生。例如,当Task对象的状态转变为SUCCEEDED状态,那么WORKER_STATE_SUCCEEDED事件发生,同时onSucceeded事件处理程序会被调用。然后,受保护的便利方法succeeded在JavaFX应用程序线程被调用。
有几个受保护的便利方法,比如cancelled、failed、running、scheduled和succeeded,当Worker实现的状态转变为相应状态时都会被调用。这几个方法可以在Task类或Service类的子类中重写,以便状态改变时在应用程序中实现相应的业务逻辑。
例5展示了一个Task实现,它在任务成功、取消或失败时更新状态信息。
例5:
[java]
import javafx.concurrent.Task;
Task task = new Task() {
@Override protected Integer call() throws Exception {
int iterations = 0;
for (iterations = 0; iterations < 100000; iterations++) {
if (isCancelled()) {
break;
}
System.out.println("Iteration " + iterations);
}
return iterations;
}
@Override protected void succeeded() {
super.succeeded();
updateMessage("Done!");
}
@Override protected void cancelled() {
super.cancelled();
updateMessage("Cancelled!");
}
@Override protected void failed() {
super.failed();
updateMessage("Failed!");
}
};