我有一个对我来说很奇怪的问题。我实现了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);
为什么用if-else语句每50ms调用一次Runnable,为什么用switch只调用一次??
编辑:因为你问,这里是MenuEvents和ev的声明:
public enum MenuEvents {
DESIGNER, CONFIG, ABOUT, BACKMENU, EXIT, ENUM_LAST
};
public MenuEvents;
是的,使用ENUM_LAST
我试图复制C约定,但在那里我也使用它作为一种NULL
值。
我没有看到您的完整代码,但我非常确定在第一次执行Runnable时ev变量为null。
结果,switch语句抛出一个NullPointerException,它将终止线程。
在if-else块的情况下,既不执行if块也不执行else-if块,最后ev被分配ENUM_LAST的值。
问题内容: 我正在尝试使用jaxb- maven插件使用JAXB将多个XSD转换为不同包中的POJO。我已将其设置为使用多个执行块,然后执行第一个执行块,然后出现一条消息:模式或绑定文件中未检测到更改 这是我pom.xml的摘录: 这是我收到的错误消息: 如果我交换执行块,则第一个总是执行,其余两个块得到相同的消息。 关于如何解决这个问题的任何想法? 问题答案: 通过升级到版本1.6进行了修复 和
我正在开发一个带有Spring框架和MySQL数据库的J2EE应用程序。我想执行SQL脚本从java(可能与一个请求映射)只有一次。我将sql语句作为键值对存储在属性文件中,并循环遍历每个键并执行语句。 这是正确的做法吗?或者还有其他方法可以做到这一点吗?提前谢谢。 更新: 正如评论中提到的,我尝试了Spring jdbc intiize数据库,但它没有执行sql文件中的所有查询。只有第一个“创建
问题内容: 有人可以解释一下为什么我的循环从0变为7吗?我只需要获得前3种情况,但是程序将遍历所有代码。代码位于show()方法中。 问题答案: 因为没有休息。在每种情况下,您都需要break关键字。有关详细说明,请参见switch语句Java教程。 例如 否则,如果上述情况之一被评估为true,则将执行其他情况。
本文向大家介绍iOS实现代码只执行一次,包括了iOS实现代码只执行一次的使用技巧和注意事项,需要的朋友参考一下 iOS实现代码只让执行一次
我正在学习angularjs,作为一个测试项目,我正在轮询一个返回活动进程列表(它们的pid)并显示这些进程的服务器。 客户端代码如下所示: 这适用于Firefox和Chrome,但不太适用于Internet Explorer 11。 所有浏览器每秒都执行ReloadData方法,但IE11实际上并不从服务器获取流程数据。Firefox和Chrome确实每秒都会获取数据。我也可以在服务器的输出中看
我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?