如何让Vaadin 10的组件从点击事件一个一个变化?

How to make Vaadin 10 components change one by one from click event?

由于某些原因,组件总是随着按钮的同时单击而改变。
我需要一个一个地改。这是示例:

countButton.addClickListener(buttonClickEvent -> {
    int input = Integer.parseInt(inputTextField.getValue());

    long factorialResult = countFactorial(input);
    resultFactorialLabel.setText("Factorial: " + factorialResult);

    //just for example, could be processing that takes really long
    try {
        sleep(1000);
    } catch (InterruptedException ignored) {
    }

    int fibonacciResult = countFibonacci(input);
    resultFibonacciLabel.setText("Fibonacci: " + fibonacciResult);
});

当我 运行 它 - 10 秒过去了,然后 resultFactorialLabel 和 resultFibonacciLabel 同时改变,当我想要改变 resultFactorialLabel 之后,在 10 秒内,resultFibonacciLabel 被改变。我该怎么做?
标签是如何同时变化的?

Vaadin 版本:10.0.1

这是通常的生命周期:

  • 客户端(浏览器)发生了一个事件,例如单击一个按钮。
  • 这会向服务器(您的 Vaadin 应用程序)发出 HTTP 调用。
  • Vaadin 处理调用,在服务器上触发事件,即执行事件的所有已注册侦听器,例如你的点击监听器。
  • 在侦听器中,您对(服务器端)组件进行了一些更改,例如更新标签。
  • 之后,将向客户端发送一个响应,其中包含有关所有已更改组件的信息。
  • 然后,在客户端,更新 HTML 以反映更改的组件。

因此,如果您在侦听器中执行 sleep,它只会延迟对客户端的响应。

如果您需要通过单击按钮触发昂贵的操作,您应该在后台线程中执行并在操作完成后更新 UI。有关如何从后台线程更新 UI,请参阅 docs