Java:如何在特定时间后“打破”切换案例?

问题描述 投票:1回答:3

我有一个渲染项目的方法。

我遇到的问题是我想让开关盒在4.1秒后断开。我不想使用Thread.sleep,因为它会在运行时冻结整个屏幕。

这是我尝试过的,但它不起作用:

private void drawItems(){
       itemSelected = randomInt.getValue3();
       switch (itemSelected){
           case 0: if (!Obstacle.case0) {
               doSomething();
           }
               new java.util.Timer().schedule(
                       new java.util.TimerTask() {
                           public void run() {
                                break;
                           }
                       },
                       4100
               );
// other cases

我想打破它,因为否则屏幕上会呈现多于1个项目,但问题是“中断”需要在交换机或循环之外。

java libgdx switch-statement break
3个回答
1
投票

在最简单的形式,如:

public class DrawingThread extends Thread {
    private boolean goon = true;

    public void run() { 
        //Drawing routine.. stop if goon is no longer true
    }

    public void requestStop() {
        goon = false;
    }
 }

然后在你的主方法/驱动程序类等:

 DrawingThread dThread = new DrawingThread();
 dThread.start();
 //Other things, for instance try { Thread.sleep(4100) } catch (InterruptedException ie) {}
 dThread.requestStop();

Some pointers at Jenkov.com,也在Oracle的java文档中。如果这对您有用,请查看重用Thread对象,该页面侧栏中第26点下的某些内容可能会有用。


1
投票

你根本不应该触发线程,只需使用增量时间处理时间,你也可以稍后创建一个包装器:

How can I set timer in LIBGDX

这是我的计时器实现:libgdx Timer countdown implmentation


1
投票

没有足够的声誉来评论,但我不会像人们建议的那样使用本机Java线程来解决这个问题。我注意到这篇文章被标记为Libgdx。 Libgdx在其文档中明确指出不支持线程,因此我会谨慎使用它们。

你应该做的是间隔调用drawItems函数。 Libgdx有自己的计时器类,我认为它们使用与主线程相同的线程(虽然我不会引用我,我会使用Hllink的答案来确定)。从当前代码中删除计时器计划并将其移动到任何调用drawItems函数,每次完成时重新启动计时器,以便计时器无限循环(如果需要)。我现在正在打电话,所以我稍后会弹出我的桌面并发布代码。

© www.soinside.com 2019 - 2024. All rights reserved.