Java 在一段确定的时间间隔后,我如何重复调用一个方法?

Java 在一段确定的时间间隔后,我如何重复调用一个方法?,java,android,time,libgdx,Java,Android,Time,Libgdx,我正在使用libgdx和androidstudio。在这里,我试图在确定的时间间隔0.5秒后调用一个方法(用于创建纹理)。但当我运行程序时,它显示“无响应”对话框 private float x=System.currentTimeMillis(); //in update method public void update(float dt) { handleinput(); while(x<=System.currentTimeMillis())

我正在使用libgdx和androidstudio。在这里,我试图在确定的时间间隔0.5秒后调用一个方法(用于创建纹理)。但当我运行程序时,它显示“无响应”对话框

private float x=System.currentTimeMillis();

//in update method


public void update(float dt) {

        handleinput();
        while(x<=System.currentTimeMillis()){
            eggs.create();
            //eggs.update(dt);
            x+=500;
         }
}
private float x=System.currentTimeMillis();
//在更新方法中
公共无效更新(浮动dt){
handleinput();

(x要处理时间,请在每次调用render时使用一个添加增量时间的变量,如果该变量优于1.0f,则表示已过一秒钟,则代码如下所示:

        private float timeSeconds = 0f;
        private float period = 1f;

        public void render() {
            //Execute handleEvent each 1 second
            timeSeconds +=Gdx.graphics.getDeltaTime();
            if(timeSeconds > period){
                timeSeconds-=period;
                handleEvent();
            }

            [...]

        }

        public void handleEvent() {
             [...]
        }

为了保持组织有序,我个人在我的主游戏类上有一个数组,它保存我所有的定时事件,并处理渲染周期中的所有内容。

你的代码实际上是一场与时钟竞争的比赛

循环可能永远不会结束,因为
eggs.create()
比循环结束时
x
的增量500要花更多的时间

使用
float
而不是
long
也不是一种好的做法

编辑:
要进行适当的调度,请使用与Florian S.在回答中建议的类似的最著名的Java方法。

您的问题是不应该在此处使用
System.currentTimeMillis()

:

currentTimeMillis

返回:当前时间与UTC 1970年1月1日午夜之间的差值,以毫秒为单位

公共无效更新(float dt){
如果(dt<500){
int x=10;
//设x为要递增的某个值
更新(dt+x);
}
...
}

此版本不能保证半秒钟,但可以让您更好地了解如何解决此问题。

当您希望循环运行代码时,应使用
ExecutorService.scheduleAtFixedRate()
或Android等效工具。您所做的将在egs.create()时阻止线程需要500毫秒以上。

您的卵需要多长时间。create()方法需要花费?此方法甚至不做您希望它做的事情。首先,请使用
long
而不是
float
进行
x
Thank you@quinz它工作了!非常感谢!很酷,这很有帮助。请注意,使用适当的时间表将是一种编程实践。
public void update(float dt) { 
    if(dt < 500) {
        int x = 10;
        // let x be some value to increment
        update(dt + x);
    }
    ...
}