Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何暂停Java程序2秒钟_Java_Timer_Pause - Fatal编程技术网

如何暂停Java程序2秒钟

如何暂停Java程序2秒钟,java,timer,pause,Java,Timer,Pause,我是Java新手,正在制作一个小游戏进行练习 if (doAllFaceUpCardsMatch == false) { //run pause here// concentration.flipAllCardsFaceDown(); } else { concentration.makeAllFaceUpCardsInvisible(); } 我想在比赛开始前暂停两秒钟 concentration.flipAllCardsFaceDown();

我是Java新手,正在制作一个小游戏进行练习

if (doAllFaceUpCardsMatch == false) {
        //run pause here//
        concentration.flipAllCardsFaceDown();
} else {
        concentration.makeAllFaceUpCardsInvisible();
}
我想在比赛开始前暂停两秒钟

concentration.flipAllCardsFaceDown();

我该如何暂停呢?

你可以在这里找到类似的帖子:

基本上是老帖子里说的。您可以使用java.util.concurrent.TimeUnit

    import java.util.concurrent.TimeUnit;

    if (doAllFaceUpCardsMatch == false) {
        TimeUnit.SECONDS.sleep(2);
        concentration.flipAllCardsFaceDown();
    } else {
        concentration.makeAllFaceUpCardsInvisible();
    }
您可以使用:

 Thread.sleep(2000);

请注意,这两个方法都会抛出
InterruptedException
,这是一个已检查的异常,因此您必须捕获该异常或在方法中声明该异常

编辑: 捕获异常后,您的代码将如下所示:

if (doAllFaceUpCardsMatch == false) {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        concentration.flipAllCardsFaceDown();
} else {
        concentration.makeAllFaceUpCardsInvisible();
}

由于您是新手,我建议您在熟悉java后学习如何进行异常处理。

您可以使用Thread.currentThread().sleep(2000)将当前线程暂停2秒(2000秒)。对于那些只想快速破解而不需要带图书馆的人来说,你应该用try/catch来包围它

public class Timing {
    public static void main(String[] args) {
            int delay = 1000; // number of milliseconds to sleep

            long start = System.currentTimeMillis();
            while(start >= System.currentTimeMillis() - delay); // do nothing

            System.out.println("Time Slept: " + Long.toString(System.currentTimeMillis() - start));
    }
}

对于高精度60fps游戏,这可能不是您想要的,但可能有些人会发现它很有用。

另一个非常简单的方法是创建以下方法:

public static void pause(long timeInMilliSeconds) {

    long timestamp = System.currentTimeMillis();


    do {

    } while (System.currentTimeMillis() < timestamp + timeInMilliSeconds);

}
公共静态无效暂停(长时间毫秒){
长时间戳=System.currentTimeMillis();
做{
}while(System.currentTimeMillis()
线程的可能重复。睡眠将是一个明显的选择,但是,如果您使用像Swing或JavaFX这样的GUI,您不应该在其调度线程的上下文中执行此操作,这将非常非常糟糕。大多数UI框架都有自己定义的机制来执行此操作,但在执行Thread.sleep()时,我们没有这些信息:“错误:未报告的异常InterruptedException;必须捕获或声明为抛出Thread.sleep(2000);”当compiling@Ethanph89好,编译器正在准确地告诉您必须执行的操作:捕获
InterruptedException
,或声明将其抛出。顺便说一句,不要显式地与
true
false
进行比较。感谢您的帮助!正如我所说的,我对Java(以及大多数编程都是新手)-我如何捕获异常?这会浪费大量CPU使用。这正是我所需要的。流行的Swing Timer方法不起作用,因为在计时器执行时主线程会继续运行。虽然这段代码可能会解决这个问题,但如何以及为什么解决这个问题将真正有助于提高文章的质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并指出哪些限制和假设适用。我想这对任何知道方法是什么以及如何调用它的人来说都是可以的。如果你不知道,这个人不应该在这里复制和粘贴代码,而是做一些基本的Java课程。在伸出援助之手和束缚灵魂之间有一条非常直线。
public static void pause(long timeInMilliSeconds) {

    long timestamp = System.currentTimeMillis();


    do {

    } while (System.currentTimeMillis() < timestamp + timeInMilliSeconds);

}