SWT中的javax.swing.Timer等价物?

SWT中的javax.swing.Timer等价物?,java,timer,swt,Java,Timer,Swt,我需要一些方法在用户界面线程上延迟运行代码,并且能够中止等待。这可以通过swing中的javax.swing.Timer完成。SWT中是否有类似的功能Display#timerExec显然无法取消未来的运行。下面是一个使用Display#timerExec(int,Runnable)的示例: 下面是一个使用Display#timerExec(int,Runnable)的示例: 我的目标是使空闲检测器平滑用户界面。当用户在UI的一个部分进行更改时,系统将等待1000毫秒并更新UI的其他部分。如果在

我需要一些方法在用户界面线程上延迟运行代码,并且能够中止等待。这可以通过
swing
中的
javax.swing.Timer
完成。
SWT
中是否有类似的功能
Display#timerExec
显然无法取消未来的运行。

下面是一个使用
Display#timerExec(int,Runnable)
的示例:


下面是一个使用
Display#timerExec(int,Runnable)
的示例:


我的目标是使空闲检测器平滑用户界面。当用户在UI的一个部分进行更改时,系统将等待1000毫秒并更新UI的其他部分。如果在等待期间,例如在800毫秒内,用户再次进行更改,则系统取消等待该时间段,并再次开始等待1000毫秒

Swing
中,使用一次延时定时器解决了这一问题。斯温的定时器为此做出了贡献。我想知道,如果同样的是SWT制造的

可能没有直接的等价物,所以我用util的计时器创建了一个类:

public abstract class DelayedInfrequentAction implements Runnable {

    private int delay;
    private Display display;

    private Timer timer = null;

    public DelayedInfrequentAction(Display display, int delay) {
        this.display = display;
        this.delay = delay;
    }

    public synchronized void kick() {

        if( timer != null ) {
            timer.cancel();
            timer.purge();
            timer = null;
        }

        timer = new Timer(this.getClass().getSimpleName(), true);
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                display.syncExec(DelayedInfrequentAction.this);
                synchronized (DelayedInfrequentAction.this) {
                    timer = null;
                }

            }}, delay);

    }

    @Override
    abstract public void run();

}

这不是Swing的计时器等价物,而是利用了utils计时器的取消功能。

我的目标是使空闲检测器平滑用户界面。当用户在UI的一个部分进行更改时,系统将等待1000毫秒并更新UI的其他部分。如果在等待期间,例如在800毫秒内,用户再次进行更改,则系统取消等待该时间段,并再次开始等待1000毫秒

Swing
中,使用一次延时定时器解决了这一问题。斯温的定时器为此做出了贡献。我想知道,如果同样的是SWT制造的

可能没有直接的等价物,所以我用util的计时器创建了一个类:

public abstract class DelayedInfrequentAction implements Runnable {

    private int delay;
    private Display display;

    private Timer timer = null;

    public DelayedInfrequentAction(Display display, int delay) {
        this.display = display;
        this.delay = delay;
    }

    public synchronized void kick() {

        if( timer != null ) {
            timer.cancel();
            timer.purge();
            timer = null;
        }

        timer = new Timer(this.getClass().getSimpleName(), true);
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                display.syncExec(DelayedInfrequentAction.this);
                synchronized (DelayedInfrequentAction.this) {
                    timer = null;
                }

            }}, delay);

    }

    @Override
    abstract public void run();

}

这不是Swing的计时器等价物,而是利用了utils计时器的取消功能。

鉴于SWT和Eclipse之间的纠葛,我打赌他们假定
UIJob
涵盖了这一点。使用java.util.Timer和TimerTask
http://stackoverflow.com/questions/13194201/creating-a-java-timer-and-a-timertask
我喜欢。但是想知道是否存在更合适的类。考虑到SWT和Eclipse之间的纠缠,我打赌他们认为
UIJob
涵盖了这一点。使用java.util.Timer和TimerTask
http://stackoverflow.com/questions/13194201/creating-a-java-timer-and-a-timertask
我喜欢。但想知道是否存在更合适的类。看不出在计时器启动后在哪里取消操作?@Dims只需按一下按钮;)提示:停止
Runnable
的逻辑在
Runnable
本身中。如果选择了
按钮,它不会自动重新启动。按钮只是将链置于暂停状态。我看到了,但这不是取消,这是暂停。@变暗,然后只需从
按钮中删除
SWT的
侦听器。选择
,它正在取消;)看不到计时器启动后您在哪里取消操作?@Dims只需按一下按钮;)提示:停止
Runnable
的逻辑在
Runnable
本身中。如果选择了
按钮,它不会自动重新启动。按钮只是将链置于暂停状态。我看到了,但这不是取消,这是暂停。@变暗,然后只需从
按钮中删除
SWT的
侦听器。选择
,它正在取消;)