当前位置: 首页 > 知识库问答 >
问题:

JAVAFX与查询数据库的并发性[重复]

班宏毅
2023-03-14

我正在使用JAVAFX over JAVA8构建一个应用程序。在我的应用程序中,我有一个数据网格,应该填充来自数据库的结果集。但是,查询可能需要一段时间,在此之前我不希望GUI处于空闲状态。

对于这种问题,最好的线程架构是什么?

我考虑对查询本身使用Task,然后将结果放在数据网格中。然而,主UI线程不允许其他线程接触对象。如果我只是等待线程结束,它就会变成一个同步进程(我想避免这种情况)

有什么想法吗?

共有1个答案

宇文勇
2023-03-14

我会接受那项任务。在后台长时间运行操作总是一个好主意,这样UI就不会冻结。此外,您可以考虑分页(例如,通过在表中向下滚动,或上一页和下一页按钮)

下面是我使用Task的方法

    final Task<List<User>> searchUserTask = new Task<List<User>>() {
        @Override
        protected List<User> call() throws Exception {
              //search logic, for example call to DB
              return //list of users
        }

    };

    //Here we add a listener to the state, so that we can know when the operation finishes, and decide what to do after
    searchUserTask.stateProperty().addListener((ObservableValue<? extends Worker.State> source, Worker.State oldState, Worker.State newState) -> {

        if (newState.equals(Worker.State.SUCCEEDED)) { //the operation finished successfully
            List<User> result = searchTask.getValue();
            //set value to a UI component (this method runs on the UI thread)
            //usersTable.getItems().setAll(matches);
        } else if (newState.equals(Worker.State.FAILED)) {
            Throwable exception = searchTask.getException();
            log.error("Contact search failed", exception);
        }
    });

    new Thread(searchUserTask).start();

这里你有一个模拟回调机制的方法。你在状态中添加一个监听器,当它改变时,事件将自动触发,这取决于你是否正确捕获它,以及处理成功状态等。

 类似资料:
  • 问题内容: 我刚刚发现了信息,我只是在检查是否有与项目中的一些朋友一起遇到约束的想法,尽管这更多是我一直在尝试找到的理论问题一个答案一段时间。 我不太喜欢密码学,但是如果我不够清楚,我将尝试编辑/评论以澄清任何问题。 简而言之,环境是这样的: 前端用于访问加密/解密密钥,后端用于存储和查询的应用程序。 例如,有一个您无法访问几个字段的数据库,让我们说“地址”,它通常是文本/ varchar。 您无

  • 我在MySQL中有一个表,它有一个主键列。 有什么建议吗??也许是一个询问..:)

  • 问题内容: 我在python中有2个数据框,我想查询数据。 DF1:4M记录x 3列。查询函数比loc函数更有效。 DF2:2K记录x 6列。loc函数的接缝比查询函数更有效。 这两个查询都返回一条记录。通过将相同的操作循环运行10K次来完成仿真。 运行python 2.7和pandas 0.16.0 有什么建议可以提高查询速度? 问题答案: 为了提高性能,可以使用:

  • 1、查询重复的单个字段(group by) select 重复字段A, count(*) from 表 group by 重复字段A having count(*) > 1 2、查询重复的多个字段(group by) select 重复字段A, 重复字段B, count(*) from 表 group by 重复字段A, 重复字段B having count(*) > 1

  • SqliteOpenHelper只是一个工具,是SQL世界和OOP之间的一个通道。我们要新建几个类来请求已经保存在数据库中的数据,和保存新的数据。被定义的类会使用ForecastDbHelper和DataMapper来转换数据库中的数据到domain models。我仍旧使用默认值的方式来实现简单的依赖注入: class ForecastDb( val forecastDbHelper:

  • 本文向大家介绍thinkPHP5实现的查询数据库并返回json数据实例,包括了thinkPHP5实现的查询数据库并返回json数据实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了thinkPHP5实现的查询数据库并返回json数据。分享给大家供大家参考,具体如下: TP5 实现查询数据库返回json数据(返回json数据函数实例) 返回结果: 一、把格式化json函数写到公共文件com