首页>Program>source

我已经多次阅读此页面,并且 只是没有看到GwT的 Timer之间的一些固有差异 和 Scheduler 类.我正在寻找以下各项的用例和适用性:

  • TimerTimer::scheduleTimer::scheduleRepeating
  • Scheduler::scheduleDeferred
  • Scheduler::scheduleIncremental
  • IncrementalCommand
  • DeferredCommand

这些似乎或多或少都在做着相同的事情,感觉您可以用所有这些东西实现相同的目标.这仅仅是GwT的一种方式,提供了多种完成同一件事的方式吗? 如果没有,请帮助我了解何时以及在何处适当使用它们。

最新回答
  • 2021-1-11
    1 #

    使用 Scheduler 当您需要浏览器完成当前正在执行的操作,然后告诉它执行其他操作时.例如:

    myDialogBox.show();
    Scheduler.get().scheduleDeferred(new ScheduledCommand() {
        @Override
        public void execute() {
            myTextBox.setFocus();
        }
    });
    

    在此示例中,只有在浏览器完成对话框的呈现之前,才会设置焦点,因此您告诉程序等待直到浏览器准备就绪。

    使用 Timer 如果您希望在指定的时间段后执行某些操作.例如:

    notificationPanel.show();
     Timer timer = new Timer() {
         @Override
         public void run() {
             notificationPanel.hide();
         }
     };
     timer.schedule(10000);
    

    此代码将显示notificationPanel,然后在10秒后将其隐藏。

  • 2021-1-11
    2 #

    正如JavaDoc所说, DeferredCommand 不赞成使用 Scheduler . DeferredCommand的问题 和 IncrementalCommand 它们具有静态状态(这使得在测试中难以可靠使用).此外,它们的(静态)方法进行JSNI调用,这迫使您使用 GWTTestCase 测试您的代码(静态方法不容易模拟).静态方法还使其无法包装(例如,添加一些日志记录或其他内容)。
    另一方面,您使用 Scheduler的实例 (如果您需要可测试的代码,则将使用依赖注入来获取调度程序的实例,并且永远不会调用 Scheduler.get() 除了您的DI"工厂"中).在测试中,您可以使用 StubScheduler 例如。

    然后有 Timer ,与其他类似,但是可以取消计划的任务.请注意 Timer 就像 DeferredCommand一样,也使用JSNI ; 任何使用 Timer的代码 将需要一个 GWTTestCase 进行单元测试。

相关问题

  • c#:RequestUrlReferrer为空?
  • java:注释以过滤@OneToMany关联的结果