我有一个对我来说很奇怪的问题。我实现了Runnable
, 来执行ScheduledExecutorService
。问题是,它只执行一次......
这是有用的代码(ev
是一个枚举):
private class MenuEventsListener implements Runnable {
@Override
public void run() {
System.out.println("Next iteration...");
switch(ev) {
case DESIGNER:
foo();
break;
case EXIT:
dispose();
System.exit(0);
break;
}
ev = MenuEvents.ENUM_LAST;
}
}
有趣的是,如果我用一些 if-else 语句替换那个开关,它工作正常,这意味着这个 Runnable 按照我的要求每 50 毫秒执行一次......!
private class MenuEventsListener implements Runnable {
@Override
public void run() {
System.out.println("Next iteration...");
if (ev == MenuEvents.DESIGNER)
foo();
else if (ev == MenuEvents.EXIT) {
dispose();
System.exit(0);
}
ev = MenuEvents.ENUM_LAST;
}
}
这是调度设置:
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new MenuEventsListener(),
0, 50, TimeUnit.MILLISECONDS);
为什么 Runnable 每 50ms 用 if-else 语句调用一次,为什么只用 switch 调用一次?
编辑:因为你问,这里是 MenuEvents 和 ev 的声明:
public enum MenuEvents {
DESIGNER, CONFIG, ABOUT, BACKMENU, EXIT, ENUM_LAST
};
public MenuEvents;
是的,ENUM_LAST
我试图重现 C 约定,但在那里我也将它用作一种NULL
价值。