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