IAm*_*aja 20 java gwt scheduler
我已多次阅读此页面,我只是没有看到GWT Timer和Scheduler类之间的一些固有差异.我正在寻找以下各项的用例和适用性:
Timer,Timer::schedule和Timer::scheduleRepeatingScheduler::scheduleDeferredScheduler::scheduleIncrementalIncrementalCommandDeferredCommand这些似乎都在做同样的事情,或多或少,感觉你可以完成所有这些目标.这只是GWT的方式,提供多种方式做同样的事情?如果没有,请帮助我了解每个适当使用的时间和地点.
And*_*gin 32
当您需要浏览器完成其当前正在执行的任何操作之前,请使用Scheduler,然后再告诉它执行其他操作.例如:
myDialogBox.show();
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
myTextBox.setFocus();
}
});
Run Code Online (Sandbox Code Playgroud)
在此示例中,在浏览器完成对话框的渲染之前,不会设置焦点,因此您告诉程序等待浏览器准备就绪.
如果您希望在指定的时间段后执行某些操作,请使用Timer.例如:
notificationPanel.show();
Timer timer = new Timer() {
@Override
public void run() {
notificationPanel.hide();
}
};
timer.schedule(10000);
Run Code Online (Sandbox Code Playgroud)
此代码将显示notificationPanel,然后它将在10秒后隐藏它.
Tho*_*yer 11
正如JavaDoc所说,DeferredCommand不赞成使用Scheduler.这个问题DeferredCommand和IncrementalCommand是,他们有一个静态的状态(这使得它很难在测试中可靠地使用).而且,它们的(静态)方法会使JSNI调用强制您使用a GWTTestCase来测试代码(静态方法不能 - 易于模拟).静态方法也使得无法包装它们(例如添加一些日志记录或其他内容).
另一方面,您使用a的实例Scheduler(如果您想要可测试的代码,您将使用依赖注入来获取调度程序的实例,Scheduler.get()除了在您的DI"工厂"之外永远不会调用).在测试中,您可以使用StubScheduler例如.
然后就是Timer,这与其他人类似,但计划任务可以取消.注意,Timer也使用JSNI,就像DeferredCommand; 任何使用a的代码Timer都需要GWTTestCase进行单元测试.
| 归档时间: |
|
| 查看次数: |
18063 次 |
| 最近记录: |