在Java中执行方法时暂停执行x秒
在执行方法时,如何暂停应用程序 考虑下面的例子:在Java中执行方法时暂停执行x秒,java,methods,pause,Java,Methods,Pause,在执行方法时,如何暂停应用程序 考虑下面的例子: private void myMethod() { // some lines of code this.player.activateEffect(true); // pause for 5 seconds this.player.activateEffect(false); } 我想让activeEffect方法激活5秒钟,使用暂停。以下是代码: 以下是代码: 最好是在myMethod()中执行操作,然后在5秒钟后调
private void myMethod() {
// some lines of code
this.player.activateEffect(true);
// pause for 5 seconds
this.player.activateEffect(false);
}
我想让activeEffect
方法激活5秒钟,使用暂停。以下是代码:
以下是代码:
最好是在myMethod()中执行操作,然后在5秒钟后调用另一个方法,可能是Runnable
private void myMethod() {
// some lines of code
this.player.activateEffect(true);
// run afterDelay in 5 seconds
postDelayed(afterDelay, 5000);
}
private Runnable afterDelay = new Runnable() {
@Override
public void run() {
player.activateEffect(false);
}
};
这段代码来自我自己使用Android Java的经验,但我认为这项技术是可移植的。你最好在myMethod()中执行你的操作,然后在5秒钟后调用另一个方法,可能是Runnable
private void myMethod() {
// some lines of code
this.player.activateEffect(true);
// run afterDelay in 5 seconds
postDelayed(afterDelay, 5000);
}
private Runnable afterDelay = new Runnable() {
@Override
public void run() {
player.activateEffect(false);
}
};
这段代码来自我自己使用Android Java的经验,但我认为这项技术是可移植的。在状态更改方法中等待的整个想法是有缺陷的。等待会延迟整个线程,阻止完成任何工作 如果恰好是UI控制线程,则应用程序将冻结
你真正想做的是给“效果”一个超时值,并在每次(游戏)“勾选”时检查超时是否已过期,并在过期时将其删除。在状态更改方法中等待的整个想法是有缺陷的。等待会延迟整个线程,阻止完成任何工作 如果恰好是UI控制线程,则应用程序将冻结
你真正想做的是给“效果”一个超时值,并在每次(游戏)“勾选”时检查超时是否已过期,并在过期时将其删除。Thread.sleep将阻止线程,如果它在UI线程上运行,那么应用程序将冻结有人知道程序“冻结”的原因吗当从另一个方法调用时,在一定的时间内?如果我直接从实例接口调用该方法,它不会冻结并且工作得很好。顺便说一句,我编写了一个名为MgntUtils的开源Java库,其中有一个带有方法sleepFor(Long,TimeUnit)的TimeUtils类。在它的内部是“吞咽”异常,因此您必须执行以下操作,而不是上面的代码:TimeUtils.sleepFor(5L,TimeUnit.SECONDS);在内部,它的功能与答案中的代码大致相同,但它更紧凑。这是一篇文章的链接,解释了库中有哪些实用程序以及从何处获取它(可以使用JAR、源代码和java文档)Thread.sleep将阻止线程,如果它在UI线程上运行,那么应用程序将冻结有人知道程序“冻结”的原因吗当从另一个方法调用时,在一定的时间内?如果我直接从实例接口调用该方法,它不会冻结并且工作得很好。顺便说一句,我编写了一个名为MgntUtils的开源Java库,其中有一个带有方法sleepFor(Long,TimeUnit)的TimeUtils类。在它的内部是“吞咽”异常,因此您必须执行以下操作,而不是上面的代码:TimeUtils.sleepFor(5L,TimeUnit.SECONDS);在内部,它的功能与答案中的代码大致相同,但它更紧凑。这是一篇文章的链接,解释了库中有哪些实用程序以及从何处获取(可以使用工作JAR、源代码和java文档)
Thread。如果这是一个线性控制台程序,或者线程不是问题,那么sleep
可以工作。但是,如果此代码是事件驱动GUI(如Swing或JavaFX程序)的一部分,则很容易冻结整个程序,通过使用Thread.sleep
使其无响应,而不管调用哪个线程。您可能希望提供有关程序结构的更多信息。请查看Thread。如果这是一个线性控制台程序或线程不是问题的程序,则sleep
可以工作。但是,如果此代码是事件驱动GUI(如Swing或JavaFX程序)的一部分,则很容易冻结整个程序,通过使用Thread.sleep
使其无响应,而不管调用哪个线程。你可能想提供更多关于你的程序结构的信息。看看这个。不,我认为这个例子只适用于Android,因为它看起来是Android特定处理程序类的一部分。不,我认为这个例子只适用于Android,因为它看起来是Android特定处理程序类的一部分。