设置方法运行一段时间?

时间:2013-11-23 11:23:47

标签: java

我得到一些帮助,如何使方法运行5分钟然后停止,请在布尔函数调用之后。我可以让方法运行正常,但似乎无法设置任何有效的计时器,该方法要么在被调用时连续运行,要么根本不运行。我在这里搜索并找到了一些建议,但到目前为止还没有运气。

以下是调用该方法的代码部分,满足布尔条件

 public void start()
{
    super.start();
    drawing(true);
}

public void msgCollision(Actor actor, String s, String s1)
{
    if(boom)
    {
        t1 = Time.current();
        t2 = Time.current() + 30000L;
        if(t1 < t2)
            MarkTarget();
    } else
    if(!boom)
    {
        Point3d point3d = new Point3d();
        super.pos.getTime(Time.current(), point3d);
        Vector3d vector3d = new Vector3d();
        getSpeed(vector3d);
        vector3d.x = vector3d.y = vector3d.z = 0.0D;
        setSpeed(vector3d);

我是编程和java的新手,所以请原谅我,如果我错过了一些明显的东西,它让MarkTarget()方法运行5分钟我遇到了麻烦,它似乎在调用boolean boom时连续运行t1&lt; t2,如果我将它改为t2&lt; t2,它就好像永远不会达到t2。 t1然后它根本无法运行。

每次代码运行时是否重置时间?所以在代码再次运行之前永远不会达到5分钟而TimeCurrent()会继续运行吗?或者它不是那样工作?我希望从发布繁荣时开始计算5分钟。

感谢您的帮助

3 个答案:

答案 0 :(得分:2)

这是因为您在实例化变量后立即将t1的值评估为t2的值。

if(boom)
{
    t1 = Time.current();  //t1 is now the current time
    t2 = Time.current() + 30000L; //t2 is now the current time + 5 minutes
    if(t1 < t2) //Is t1 smaller then t2? Yes it is!
        MarkTarget(); //call the function
    //Anything else? no so we will have had 1 call to it
}

如果你真的想这样做,你可以这样做:

if (boom)
{
    t1 = Time.current();
    t2 = t1 + 30000L;
    while (t1 < t2) {
        MarkTarget();
        t1 = Time.current();
    }
}

通过这种方式意识到,MarkTarget()会在很长一段时间内被调用5分钟。如果你想让它只被调用一次,然后等待5分钟:

MarkTarget();
while (t1 < t2) {
    t1 = Time.current();
}

答案 1 :(得分:0)

问题是你已经在同一个地方初始化了t1和t2。 所以,t2=t1+30000L在任何给定时间

解决方案:在调用msgCollision()而不是t1<t2之前初始化t1,使用此条件if((Time.current()-t1)<30000L)

答案 2 :(得分:0)

如果你连续调用这个函数,你可以这样写:

if(boom) {
  if (timeDone < 0) {
    timeDone = System.currentTimeMillis() + 1000 * 60 * 5; // now + 5 minutes
  }
  MarkTarget();
  if (System.currentTimeMillis() >= timeDone) { // now >= done-time?
    boom = false;
    timeDone = -1;
  }
} else {

否则,您可能需要查看Timer类或(更复杂的)ScheduledThreadPoolExecutor。