如何让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。
由于某些原因,组件总是随着按钮的同时单击而改变。
我需要一个一个地改。这是示例:
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。