如何暂停我的 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
,或者声明它被抛出。
顺便说一下,不要明确比较true
和false
。
【参考方案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 内的程序执行