在 Vaadin GUI 工具包中定期执行方法
Execute method periodically in the Vaadin GUI toolkit
我需要每 10 秒执行一个 class 的方法,但我需要在执行的主线程中执行,因为我必须在屏幕上更新内容。
我正在使用 ScheduledExecutorService
:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(runnable, 0, 10, TimeUnit.SECONDS);
Runnable runnable= new Runnable() {
public void run() {
someStuff();
}
};
这可能吗?
在 Vaadin 中没有 "main thread" 的直接对应物,大部分应用程序逻辑是 运行 在您的 Servlet 引擎的工作线程中,您不能使用或保留它。相反,您应该使用适当的锁定修改 UI 状态。从版本 7 开始,您应该最常使用 UI.access(Runnable) 方法,它会在正确锁定的情况下执行您的 UI 修改,并在使用推送连接或轮询时自动将更改发送到浏览器。
您可以将其与执行程序服务一起使用。从你的例子中得出它会是这样的:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable runnable= new Runnable() {
public void run() {
myUitoBeModified.access(() -> someStuff());
}
};
executor.scheduleAtFixedRate(runnable, 0, 10, TimeUnit.SECONDS);
请注意,如果您的 someStuff() 方法包含一些长时间的执行,如果您将其排除在 UI.access(Runnable) 方法之外并仅将实际的 UI修改成UI.access(Runnable)方法。
我需要每 10 秒执行一个 class 的方法,但我需要在执行的主线程中执行,因为我必须在屏幕上更新内容。
我正在使用 ScheduledExecutorService
:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(runnable, 0, 10, TimeUnit.SECONDS);
Runnable runnable= new Runnable() {
public void run() {
someStuff();
}
};
这可能吗?
在 Vaadin 中没有 "main thread" 的直接对应物,大部分应用程序逻辑是 运行 在您的 Servlet 引擎的工作线程中,您不能使用或保留它。相反,您应该使用适当的锁定修改 UI 状态。从版本 7 开始,您应该最常使用 UI.access(Runnable) 方法,它会在正确锁定的情况下执行您的 UI 修改,并在使用推送连接或轮询时自动将更改发送到浏览器。
您可以将其与执行程序服务一起使用。从你的例子中得出它会是这样的:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
Runnable runnable= new Runnable() {
public void run() {
myUitoBeModified.access(() -> someStuff());
}
};
executor.scheduleAtFixedRate(runnable, 0, 10, TimeUnit.SECONDS);
请注意,如果您的 someStuff() 方法包含一些长时间的执行,如果您将其排除在 UI.access(Runnable) 方法之外并仅将实际的 UI修改成UI.access(Runnable)方法。