在调用者中返回数据之前,如何等待JavaFX服务完成?

在调用者中返回数据之前,如何等待JavaFX服务完成?,java,mysql,javafx,service,Java,Mysql,Javafx,Service,在我的第一个Java项目中,我似乎无法回避这个可能是基本的问题:在JavaFX应用程序中,我有一个DAO类,它启动一个服务从mysql数据库获取值,从中构建一个对象,并将该对象返回给调用者。但是对象永远不会得到构建,因为返回发生在服务成功之前 public IQA getQA(int id) throws SQLException { try { GetQuizService getQuizService = new GetQui

在我的第一个Java项目中,我似乎无法回避这个可能是基本的问题:在JavaFX应用程序中,我有一个DAO类,它启动一个服务从mysql数据库获取值,从中构建一个对象,并将该对象返回给调用者。但是对象永远不会得到构建,因为返回发生在服务成功之前

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;
            }
        };
    }
}

代码中的问题是,服务方法是异步执行的

你应该返回任务而不是测验,如果收到结果,用它来更新你的前端。我只有很少的信息来为你创建一个合适的例子

另一个选项是向您的服务传递回调,在收到结果时调用回调,而不是返回测验

public void getQAint id,QuizReceiver回调抛出SQLException{ 试一试{ GetQuizService GetQuizService=新的GetQuizService; getQuizService.restart; getQuizService.setIdid; getQuizService.setOnSucceedede->{ callback.quizReceivedgetQuizService.getValue; }; }捕获异常e{ System.err.printlne; } 回访测验; } 公共接口接收机{ void quizReceivedIQA测验; }
GetQuizService代码在哪里?GetQuizService代码的长度超过100行。。。它也很好用。当我在getQuizService.setOnSucceed中执行一个syso时,我得到了这个。只有在return语句中我才得到空值..谢谢!最后,我认为这指向了项目中的一个设计问题,我应该解决这个问题。再次感谢塞缪尔!对任何感兴趣的人来说,我发现我所面临的情况都很好