如何使用GWT实现非阻塞计时器

如何使用GWT实现非阻塞计时器,gwt,Gwt,我有这个现有的定时器功能: final Timer waveTimer = new Timer() { @Override public void run() { double value = r.getByte(); // takes quite long to finish wave.renderWaveOnFly(valu

我有这个现有的定时器功能:

            final Timer waveTimer = new Timer() {
                @Override
                public void run() { 
                    double value = r.getByte(); // takes quite long to finish
                    wave.renderWaveOnFly(value);
            }};
            waveTimer.scheduleRepeating(50);
无论它是如何工作的,UI都是“被阻止”的,只有当部分UI调用waveTimer.cancel()时计时器结束,用户才能在UI中单击和执行任何操作。我创建了另一个计时器,在10秒后取消此计时器,因此UI在此之前不可用

有没有办法实现一个非阻塞计时器,让它暂停一段时间,也许只是为了确保UI没有被阻塞,用户仍然可以在UI中执行某些操作

我的意思是,仍然感觉UI仍然是响应的


我不确定这个数字,但可以说每100毫秒它就停止一次,然后让位于UI,然后在暂停或类似的事情之后恢复100毫秒。我在想该怎么处理。

在浏览器的UI线程之外进行计算的唯一方法是使用。但是在GWT中没有使用它们的工具:工作者代码需要一个专门的GWT链接器,而创建WebWorker只能通过JSNI实现


仅供参考,使用WebWorkers。

能否将getBytes()方法更改为异步调用?然后UI不应该挂起等待方法完成。

用户不应该在UI线程中执行任何代价高昂的操作!使用一个单独的线程。或者,如果无法绕过ti,则显示一个“加载…”/“请等待…”屏幕,最好还有一个进度指示器。@ppeterka我希望我可以这样做,但我的应用程序的功能是从flash对象(当然是用javascript包装)获得的实时字节中呈现波形看看你用的计时器的包装是什么?