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