【发布时间】:2019-08-01 01:12:24
【问题描述】:
在处理我的第一个 Java 项目时,我似乎无法解决这个可能是基本问题:在 JavaFX 应用程序中,我有一个 DAO 类,它启动一个 service 以从 mysql 获取值db,从中构建一个对象并将该对象返回给调用者。但是对象永远不会被构建,因为返回发生在服务成功之前。
public IQA getQA(int id) throws SQLException {
try {
GetQuizService getQuizService = new GetQuizService();
getQuizService.restart();
getQuizService.setId(id);
getQuizService.setOnSucceeded(e -> {
this.quiz = getQuizService.getValue();
});
} catch (Exception e) {
System.err.println(e);
}
return quiz;
}
服务工作正常,在 onSucceeded 操作中对象存在,但我怎样才能让返回等到服务完成?
根据要求,这里是 GetQuizService 的最小版本
public class GetQuizService extends Service<Quiz> {
private int id;
private Quiz quiz;
public void setId(int id) {
this.id = id;
}
@Override
protected Task<Quiz> createTask() {
return new Task<Quiz>() {
@Override
protected Quiz call() throws Exception {
// Severall calls to db here, Quiz object gets constructed
return quiz;
}
};
}
}
【问题讨论】:
-
GetQuizService代码在哪里? -
GetQuizService 代码长达 100 多行......它也可以正常工作。当我在 getQuizService.setOnSucceeded 中执行 syso 时,我得到 this.quiz 就好了。只有在 return 语句上我得到一个空值。