如何暂停我的 Java 程序 2 秒

Posted

技术标签:

【中文标题】如何暂停我的 Java 程序 2 秒【英文标题】:How to pause my Java program for 2 seconds 【发布时间】:2017-09-16 09:11:42 【问题描述】:

我是 Java 新手,正在制作一个用于练习的小游戏。

if (doAllFaceUpCardsMatch == false) 
        //run pause here//
        concentration.flipAllCardsFaceDown();
 else 
        concentration.makeAllFaceUpCardsInvisible();

我想在这里暂停游戏两秒钟

concentration.flipAllCardsFaceDown();

我将如何暂停它?

【问题讨论】:

How to delay in Java?的可能重复 Thread.sleep 将是显而易见的选择,但是,如果您使用的是 Swing 或 JavaFX 之类的 GUI,您不应该在它们的调度线程的上下文中执行此操作,那将是真的, 特别糟糕。大多数 UI 框架都有自己定义的机制来执行此操作,但我们没有这些信息 当我执行 Thread.sleep() 时,我得到:“错误:未报告的异常 InterruptedException;必须被捕获或声明为抛出 Thread.sleep(2000);”编译时 @Ethanph89 好吧,编译器准确地告诉你你必须做什么:捕捉InterruptedException,或者声明它被抛出。 顺便说一下,不要明确比较truefalse 【参考方案1】:

您可以在这里找到类似的帖子:How to delay in Java?

基本上是旧帖子中所说的。你可以使用 java.util.concurrent.TimeUnit

    import java.util.concurrent.TimeUnit;

    if (doAllFaceUpCardsMatch == false) 
        TimeUnit.SECONDS.sleep(2);
        concentration.flipAllCardsFaceDown();
     else 
        concentration.makeAllFaceUpCardsInvisible();
    

【讨论】:

【参考方案2】:

你可以使用:

 Thread.sleep(2000);

java.util.concurrent.TimeUnit.SECONDS.sleep(2);

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

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

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

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

【讨论】:

感谢您的帮助!就像我说的,我是 Java 新手(以及大多数编程方面的新手)——我将如何捕获异常?【参考方案3】:

您可以使用 Thread.currentThread().sleep(2000) 将当前线程暂停 2 秒(2000 毫秒)。如果是 InterruptedExceptions,你应该用 try/catch 包围它。

【讨论】:

【参考方案4】:

对于那些只想快速破解而无需引入图书馆的人...

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 游戏,这可能不是您想要的,但也许有些人会觉得它很有用。

【讨论】:

这有一个浪费的高 CPU 使用率。 这是我需要的。流行的 Swing Timer 方法不起作用,因为主线程在 Timer 执行时继续运行。【参考方案5】:

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

public static void pause(long timeInMilliSeconds) 

    long timestamp = System.currentTimeMillis();


    do 

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


【讨论】:

虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。 我想任何知道方法是什么以及如何调用它的人都可以。如果不知道,这个不应该在这里复制和粘贴代码,而是在做一些基本的 Java 课程。伸出援助之手和束缚灵魂之间有一条直线。

以上是关于如何暂停我的 Java 程序 2 秒的主要内容,如果未能解决你的问题,请参考以下文章

当另一个正在运行时,如何暂停一个倒数计时器?

如何在不使用 sleep() 的情况下暂停 DispatchQueue 内的程序执行

为啥我的时间 UILabel 从暂停状态恢复播放时会跳过 2 秒?

python进阶练习之——暂停一秒输出

用java编一个简单的倒计时表

如何在 Swift 中创建延迟?