我正在为我的应用程序创建 UI,该应用程序与其他平台的版本共享核心模块。在JavaFX中,我尝试使用Task http://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.htmls 在后台执行操作,但我不知道如何更新任务状态。
这就是我正在尝试做的事情。这user
变量保存执行类的实例xmlrpc /questions/tagged/xmlrpc要求:
public Task<Integer> doLogin()
{
return new Task<Integer>() {
@Override
protected Integer call()
{
user.login();
if (!user.getIsAuthorized())
{
// set the state to FAILED
}
else
{
// set the state to SUCCEDED
}
user.remember();
}
};
}
在我的 UI 线程中,我希望能够执行类似的操作来更新我的图形 UI:
loginTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
// perform an UI update here depending on the state t
}
});
我应该如何设置状态?没有什么可以做到这一点Task API http://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html.
Task
状态不适合用于用户逻辑。他们被引入控制Task
流动。将用户逻辑添加到Task
你需要使用result
概念。在你的情况下,你可能想使用Task<Boolean>
你的任务结果将是TRUE
以获得正确的凭据和FALSE
对于不正确的:
任务创建:
public Task<Boolean> doLogin() {
return new Task<Boolean>() {
@Override
protected Boolean call() {
Boolean result = null;
user.login();
if (!user.getIsAuthorized()) {
result = Boolean.FALSE;
} else {
result = Boolean.TRUE;
}
user.remember();
return result;
}
};
}
开始该任务:
final Task<Boolean> login = doLogin();
login.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
// This handler will be called if Task succesfully executed login code
// disregarding result of login operation
// and here we act according to result of login code
if (login.getValue()) {
System.out.println("Successful login");
} else {
System.out.println("Invalid login");
}
}
});
login.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
// This handler will be called if exception occured during your task execution
// E.g. network or db connection exceptions
System.out.println("Connection error.");
}
});
new Thread(login).start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)