首頁>Program>source

我已经多次阅讀此頁面,並且 只是没有看到GwT的 Timer之間的一些固有差異 和 Scheduler 類.我正在尋找以下各項的用例和適用性:

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

這些似乎或多或少都在做着相同的事情,感覺您可以用所有這些东西實現相同的目標.這仅仅是GwT的一種方式,提供了多種完成同一件事的方式吗? 如果没有,請帮助我了解何時以及在何處適当使用它们。

最新回復
  • 6月前
    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秒後將其隱藏。

  • 6月前
    2 #

    正如JavaDoc所說, DeferredCommand 不赞成使用 Scheduler . DeferredCommand的問题 和 IncrementalCommand 它们具有靜態狀態(這使得在測試中难以可靠使用).此外,它们的(靜態)方法进行JSNI呼叫,這迫使您使用 GWTTestCase 測試您的代碼(靜態方法不容易模擬).靜態方法還使其無法包裝(例如,添加一些日志記錄或其他內容)。
    另一方面,您使用 Scheduler的例項 (如果您需要可測試的代碼,則將使用依赖註入来获取排程程式的例項,並且永远不会呼叫 Scheduler.get() 除了您的DI"工厂"中).在測試中,您可以使用 StubScheduler 例如。

    然後有 Timer ,与其他類似,但是可以取消計划的任務.請註意 Timer 就像 DeferredCommand一樣,也使用JSNI ; 任何使用 Timer的代碼 將需要一个 GWTTestCase 进行單元測試。

相似問題

  • c#:RequestUrlReferrer為空?
  • java:註釋以過濾@OneToMany關聯的結果