由于某种原因,组件总是通过同时单击按钮而更改。
我需要将它们一一更改。这是示例:
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 会更新以反射(reflect)更改后的组件。
因此,如果您在监听器中执行sleep
,它只会延迟对客户端的响应。
如果您需要执行由按钮单击触发的昂贵操作,您应该在后台线程中执行此操作,并在操作完成后更新 UI。请参阅docs了解如何从后台线程更新 UI。
关于java - 如何让Vaadin 10组件根据点击事件一一改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51534136/