在可完成的未来成功后显示通知

时间:2018-06-04 10:20:53

标签: java vaadin completable-future

我有一个名为showNotification的方法,显示通知

public static void showNotification(UI ui, String notificationMessage) {
        Notification notification = new Notification(notificationMessage);
        notification.setStyleName("custom-notification");
        notification.show(ui.getPage());
}

我有一个返回CompletableFuture的服务。 在我的控制器中,我创建了方法

@Override
public CompletableFuture<?> startProcessing() {
    return processorService.start();
}

点击按钮,我想在start成功时显示通知。 我的buttonClick事件看起来像这样

event -> {
    controller.startProcessing()
        .thenAccept(aVoid -> UI.getCurrent().access(() -> {
                showNotification(getUI(), "Started processing");
            })
        ).handle((aVoid, throwable) -> {
               showNotification(getUI(), "Failed to start processing");
            return aVoid;
        });
}

问题是,在我调用另一个事件之前 - 例如点击另一个按钮 - 它不会显示通知。

有什么问题?

1 个答案:

答案 0 :(得分:3)

您需要将@Push添加到UI子类,以使浏览器打开与服务器的双向连接。没有它,只有浏览器可以启动通信,只有当有一些新事件发送到服务器时才会这样做。