延迟后自动关闭 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。

好吧,由于没有人给出正确答案,您可以使用 TimerTimerTask:

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 后妥善保管它。