GWT - 在另一个计时器内安排计时器

时间:2014-01-20 14:31:30

标签: gwt timer

我的GWT应用程序有2个计时器。两者都在重复计时器。 我开始运行Timer1,经过一段时间后,我在其run()方法中取消了定时器,并为Timer2做了scheduleReapeating。 Timer1的取消发生,但Timer2没有运行。 我尝试直接运行Timer2,它确实运行了。所以Timer2的代码没有任何问题。只有当它从定时器1中运行时它才会运行。我们不能不按计划安排定时器吗?

Timer timer1 = new Timer() {
@Override
public void run {
     //Some processing
     //...
     //..
     if(some_condition) {
         cancel();
         timer2.scheduleRepeating(100);
         }
     }
};
Timer2 timer 2 = new Timer() {
@Override
public void run() {
       //some processing
       //....
       //....
     }
}; 

}

2 个答案:

答案 0 :(得分:0)

我刚刚运行了这个测试代码,它按预期工作。它会根据您单击的单选按钮切换哪个计时器运行:

public class TestProj implements EntryPoint {

    //some timers
    Timer timer2, timer1;

    //buttons to operate timers
    RadioButton b1 = new RadioButton("group", "Timer 1"), 
                b2 = new RadioButton("group", "Timer 2");

    //output panel
    VerticalPanel output = new VerticalPanel();

    public void onModuleLoad() {

        RootPanel.get().add(b1);
        RootPanel.get().add(b2);
        RootPanel.get().add(output);

        timer1 = new Timer() {
            @Override
            public void run() {
                output.add(new Label("Timer 1 ran"));

                if (b2.getValue()) {
                    cancel();
                    timer2.scheduleRepeating(1000);
                }
            }
        };

        timer2 = new Timer() {
            @Override
            public void run() {
                output.add(new Label("Timer 2 ran"));

                if (b1.getValue()) {
                    cancel();
                    timer1.scheduleRepeating(1000);
                }
            }
        };

        //initial start of timer1
        timer1.scheduleRepeating(1000);
    }
}

答案 1 :(得分:0)

您输入的代码不是正确的代码,虽然帮助很难给出。 但是你把代码放进去的方式,它应该是一种魅力。

  • 对计时器1和2的引用是否有问题?
  • 你是否将Timer子类化了?
  • 您是否有任何可以对JS世界中的计时器对象造成影响的外部库?