我目前正在开发一款小型游戏,其中包含一些随机弹出不同时间的目标。实际的游戏将从电路板获得它的I / O,因为目标是物理的。
我的问题是,目前我有一个java.util.Timer,每2秒触发一次。一旦被触发,将显示随机目标(到目前为止工作正常)。问题是我希望在计时器仍在运行并设置其他目标时,在1-5之间随机显示秒数。
我没有错误,目标显示但永远不会消失。我想这是某种线程问题,也许因为我正在使用这个。* ,目标对象只是以某种方式迷失在幽冥中!在这里搜索问题之后,我想出了这个:
public class Target implements Runnable(){
...
public void displayFor(int seconds){
this.display();
Executors.newSingleThreadScheduledExecutor().schedule(this,time,
TimeUnit.SECONDS);
this.setDisplayed(false);
}
@Override
public void run() {
this.destroy();
}
}
基本上,初始游戏计时器(目标显示的集合)调用 displayFor(2)方法,该方法在经过时间后运行目标运行方法。目标仍然不会消失。
我已经尝试了很多不同的方法,比如 displayFor()设置另一个java.util.Timer,我也开始使用Quartz库(说实话)反正似乎有点过头了)仍然无法让它发挥作用。由于没有错误信息,我真的不知道这个。
我没有包含很多代码,因为我不认为它是相关的,但是如果你们需要更多信息来帮助我们知道:)
答案 0 :(得分:1)
我设法让它发挥作用。对于处于类似情况的任何人来说,这是正确的代码。
public class Target{
private Timer timer;
...
public void displayFor(int seconds) {
// send the output
BoardInterface.SetDigitalChannel(this.getId());
// calculate the delay
long time = seconds * 1000;
// create a new timer and schedule the new task
timer = new Timer();
timer.schedule(new TargetTimer(this), time);
this.setDisplayed(true);
}
}
class TargetTimer extends TimerTask{
Target target;
public TargetTimer(Target t){
this.target = t;
}
@Override
public void run() {
target.destroy();
}
}
不确定这是否是一种很好的方法,但它有效。如果您发现任何可以改进的地方,请告诉我们。谢谢你们!
答案 1 :(得分:0)
也许您应该告诉我们display
方法的作用。
你 un - 在destroy
/析构函数代码中显示目标?
我建议{strong}改为 <{1}}:
void display()
当然
public void setDisplayed(boolean display){
if(display) {
///... do appropriate circuit output to turn on target
} else {
/// ... do appropriate circuit output to turn off target
}
}