Java에서 무언가를 시도하고 있으며 while 루프에서 몇 초 동안 대기 / 지연 할 무언가가 필요합니다.
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
// I need to wait here
ceva[i].setSelected(false);
// I need to wait here
i++;
}
스텝 시퀀서를 구축하고 Java를 처음 사용합니다. 어떤 제안?
답변
일시 중지하려면 다음을 사용하십시오 java.util.concurrent.TimeUnit
.
TimeUnit.SECONDS.sleep(1);
1 초 동안 자거나
TimeUnit.MINUTES.sleep(1);
잠을 자다.
이것이 루프이기 때문에 이것은 고유 한 문제인 드리프트를 나타냅니다. 코드를 실행 한 다음 잠들 때마다 매 초마다 조금씩 표류하게됩니다. 이것이 문제라면를 사용하지 마십시오 sleep
.
또한 sleep
제어와 관련하여 매우 유연하지 않습니다.
매초마다 또는 1 초 지연으로 작업을 실행하려면 a 및 또는 중 하나를 적극 권장합니다 .ScheduledExecutorService
scheduleAtFixedRate
scheduleWithFixedDelay
예를 들어, myTask
매초마다 메소드를 실행하려면 (Java 8) :
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
그리고 자바 7 :
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
myTask();
}
}, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
답변
사용 Thread.sleep(1000)
;
1000
프로그램이 일시 정지하는 시간 (밀리 초)입니다.
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
답변
Thread.sleep()
통화 를 사용해야합니다 .
자세한 정보는 여기 : http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
답변
이것을 사용하십시오 :
public static void wait(int ms){
try
{
Thread.sleep(ms);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
그런 다음이 방법을 다음과 같이 호출 할 수 있습니다 :
wait(1000);
답변
사용 TimeUnit.SECONDS.sleep(1);
또는 Thread.sleep(1000);
허용 가능한 방법입니다. 두 경우 모두 InterruptedException
코드를 벌크하게 만들어야합니다 InterruptedException
. 내부에서 이미 다루는 유틸리티를 제공하는 MgntUtils (나에 의해 작성된)라는 오픈 소스 Java 라이브러리가 있습니다. 따라서 코드에는 한 줄만 포함됩니다.
TimeUtils.sleepFor(1, TimeUnit.SECONDS);
여기 에서 javadoc을 참조 하십시오 . Maven Central 또는 Github 에서 라이브러리에 액세스 할 수 있습니다 . 라이브러리에 대해 설명하는 기사는 여기 에서 찾을 수 있습니다.
답변
사용하십시오 Thread.sleep(100);
. 시간 단위는 밀리 초입니다
예를 들면 다음과 같습니다.
public class SleepMessages {
public static void main(String args[])
throws InterruptedException {
String importantInfo[] = {
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
for (int i = 0;
i < importantInfo.length;
i++) {
//Pause for 4 seconds
Thread.sleep(4000);
//Print a message
System.out.println(importantInfo[i]);
}
}
}
답변
나는 이것이 매우 오래된 게시물이라는 것을 알고 있지만 누군가에게 도움이 될 수 있습니다. 메서드를 만들 수 있으므로 일시 중지해야 할 때마다 pause(1000)
다른 밀리 초 값을 입력 할 수 있습니다 .
public static void pause(int ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
System.err.format("IOException: %s%n", e);
}
}
이것은 public static void main(String[] args)
클래스 내부의 바로 위에 삽입 됩니다. 그런 다음 메소드를 호출하려면 입력 pause(ms)
하지만 ms
일시 정지 할 밀리 초 수로 바꾸십시오 . 이렇게하면 일시 중지 할 때마다 전체 try-catch 문을 삽입 할 필요가 없습니다.