Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Vaadin-使用从数据库中获取的数据每秒更新UI数据_Java_Web Applications_Vaadin_Vaadin7 - Fatal编程技术网

Java Vaadin-使用从数据库中获取的数据每秒更新UI数据

Java Vaadin-使用从数据库中获取的数据每秒更新UI数据,java,web-applications,vaadin,vaadin7,Java,Web Applications,Vaadin,Vaadin7,有一个FieldGroup,它的数据源被设置为一个SQLContainer,配置为使用PostgreSQL数据库和FreeformQuery。另一个应用程序(不是webapp)每秒向数据库写入数据 如何立即使用新数据更新我的FieldGroup?我试图做的是设置ScheduledExecutorService,它将每秒从数据库获取数据并将其设置为FieldGroup。但它似乎不起作用-ScheduledExecutorService成功地从数据库获取数据,但UI没有更新。没有例外,UI只是没有改

有一个FieldGroup,它的数据源被设置为一个SQLContainer,配置为使用PostgreSQL数据库和FreeformQuery。另一个应用程序(不是webapp)每秒向数据库写入数据

如何立即使用新数据更新我的FieldGroup?我试图做的是设置ScheduledExecutorService,它将每秒从数据库获取数据并将其设置为FieldGroup。但它似乎不起作用-ScheduledExecutorService成功地从数据库获取数据,但UI没有更新。没有例外,UI只是没有改变

以下是我的ScheduledExecutorService的代码:

ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();

ses.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                SQLContainer latestData = DatabaseHelper.getLatestData();
                fieldGroup.setItemDataSource(latestData.getItem(id));
            }
}, 0, 1, TimeUnit.SECONDS);
我还尝试显示来自ScheduledExecutorService
Notification.show(“hello”)的通知
但它没有效果-通知不会显示。所以,也许,除了主线程之外,不可能更改UI


那么,再一次,如何让我的UI每秒更新一次来自数据库的新数据?是否有可能不是每秒钟获取数据,而是在数据库发生更改时获取数据?我也读过关于从服务器到客户端的推送-它能帮助解决我的问题吗?

是的,您需要服务器推送,同时需要正确同步对vaddin UI元素的访问。看看维客+瓦丁之书,谢谢!我还发现另一种方法是使用poll()。我刚刚添加了setPollInterval(1000);在UI类的init()中,并且没有对ScheduledExecutorService进行任何更改,并且它工作正常,UI每秒都会更新。从性能的角度看,您知道什么更好吗?当您有1-10个客户端时,这会使您在服务器上每秒增加10个请求。如果您有1000个客户端,那么您每秒会收到1000个额外请求。如果使用push,则通常不存在此类轮询请求,但它使用某种形式的大气或类似技术在需要更改客户端显示内容时将数据发送回客户端。因此,性能方面的推送更好,但它对servlet容器/代理/客户机等更敏感。