延迟后自动关闭 Vaadin window
auto closing Vaadin window after delay
我想创建自己的消息框 class 以便我可以创建不同类型的消息(例如 w/o 按钮)。对于托盘消息,我希望在延迟 5 秒后自动关闭。
我在互联网上搜索过:我发现非常旧的帖子建议 ProgressIndicator 或一些 "newer" 的 (4yo) push/poll/threading。我真的很想知道同时在 Vaadin 7.6 中是否有一个简洁的解决方案。 Push/poll 似乎有点太复杂了,我无法理解其中的机制(初学者...)。
TLDR:
您要么使用 Push/poll 技术,要么需要在 GWT 中编写全新的组件。选择权在你
要完全理解原因,您需要了解 Vaadin or/and Web 应用程序的工作原理。让我们举个例子:你想以某种方式告诉浏览器在一些延迟(5 秒)后关闭 window 。您可以通过两种不同的方式达到预期的效果:
- 在 JavaScript
中使用 setTimeout
- 从服务器向浏览器发送消息
Vaadin中的setTimeout:当然Vaadin中没有这个方法,因为这个框架使用了预编译的GWT组件。因此,您需要在 Vaadin addons repo 中找到一个组件或编写您自己的组件。 GWT 不是 JavaScript - 这是事实,但您仍然可以将自己的 JavaScript 文件附加到任何 GWT 组件。
从服务器向浏览器发送消息基本上就是Push/Polling。别无他法。 Vaadin 实际上支持两者,因此您唯一需要做的就是了解它们。
还有一个 hack,但我不推荐这种方法。通常,您可以在运行时使用以下代码执行纯 JavaScript 代码:
JavaScript.getCurrent().execute("alert('Hello')");
但是如果你想这样做,你将很难管理你的弹出窗口,因为 Vaadin 框架不会期望你关闭他负责的windows。
好吧,由于没有人给出正确答案,您可以使用 Timer
和 TimerTask
:
Window wd = new Window("Your autoclosing window");
// do stuff
Timer delayer = new Timer();
retrasador.schedule(new TimerTask(){
@Override
public void run() {
UI.getCurrent().access(new Runnable() {
@Override
public void run() {
wd.close();
}
});
}
}, 10000); // auto closes after 10 s
请注意,您可能应该在使用完 Timer 后妥善保管它。
我想创建自己的消息框 class 以便我可以创建不同类型的消息(例如 w/o 按钮)。对于托盘消息,我希望在延迟 5 秒后自动关闭。
我在互联网上搜索过:我发现非常旧的帖子建议 ProgressIndicator 或一些 "newer" 的 (4yo) push/poll/threading。我真的很想知道同时在 Vaadin 7.6 中是否有一个简洁的解决方案。 Push/poll 似乎有点太复杂了,我无法理解其中的机制(初学者...)。
TLDR: 您要么使用 Push/poll 技术,要么需要在 GWT 中编写全新的组件。选择权在你
要完全理解原因,您需要了解 Vaadin or/and Web 应用程序的工作原理。让我们举个例子:你想以某种方式告诉浏览器在一些延迟(5 秒)后关闭 window 。您可以通过两种不同的方式达到预期的效果:
- 在 JavaScript 中使用 setTimeout
- 从服务器向浏览器发送消息
Vaadin中的setTimeout:当然Vaadin中没有这个方法,因为这个框架使用了预编译的GWT组件。因此,您需要在 Vaadin addons repo 中找到一个组件或编写您自己的组件。 GWT 不是 JavaScript - 这是事实,但您仍然可以将自己的 JavaScript 文件附加到任何 GWT 组件。
从服务器向浏览器发送消息基本上就是Push/Polling。别无他法。 Vaadin 实际上支持两者,因此您唯一需要做的就是了解它们。
还有一个 hack,但我不推荐这种方法。通常,您可以在运行时使用以下代码执行纯 JavaScript 代码:
JavaScript.getCurrent().execute("alert('Hello')");
但是如果你想这样做,你将很难管理你的弹出窗口,因为 Vaadin 框架不会期望你关闭他负责的windows。
好吧,由于没有人给出正确答案,您可以使用 Timer
和 TimerTask
:
Window wd = new Window("Your autoclosing window");
// do stuff
Timer delayer = new Timer();
retrasador.schedule(new TimerTask(){
@Override
public void run() {
UI.getCurrent().access(new Runnable() {
@Override
public void run() {
wd.close();
}
});
}
}, 10000); // auto closes after 10 s
请注意,您可能应该在使用完 Timer 后妥善保管它。