저는 50 점이 없기 때문에 귀하의 질문에 답변을 드릴 수 없으므로 여기에 질문으로 답변을 작성해야합니다.
위 코드가 작동하지 않는다고합니다. 정확히 작동하지 않는 것은 무엇입니까? 증상은 무엇이며 어떤 일이 발생할 것으로 예상합니까?
문제 중 하나는 분 및 시간을 완전히 무시하고 초만 반복하는 것입니다. 다른 하나는 전혀 사용되지 않는 스레드를 작성한다는 것입니다. 세 번째는 for 루프 안에 Thread.sleep(1000)
을 호출하는 것이지만, 끝날 때까지 스레드를 완전히 차단한다는 것을 알고 있는지 확실하지 않습니다.
for (int a = hours * 3600 + 60 * minutes + seconds; a >= 0; a--)
이 두 번째로, Thread thread = new Thread();
이 전혀 사용되지 않습니다
첫째, for 루프로 시작해야합니다.
Thirdy, Thread.sleep(1000)
은 완료 될 때까지 현재 스레드를 차단합니다.
그리고 마지막으로 조건은 a >= 0
대신 a <= 0
입니다.
그래서 위의 코드를 조정할 수있는 방법 중 하나입니다 : 이것은 '작동하지 않는'는 그것이 분 시간을 무시 의미합니다 가정한다
private void countDownTimer() throws InterruptedException {
int hours = (int) jSpinner1.getValue();
int minutes = (int) jSpinner2.getValue();
int seconds = (int) jSpinner3.getValue();
for (int a = hours * 3600 + 60 * minutes + seconds; a >= 0; a--) {
Thread.sleep(1000);
System.out.println(a);
}
}
}
.
다른 솔루션은 카운트 다운 타이머가 0에 도달하면 호출 될 것이다, 콜백 함수로 새 스레드를 생성하는 것입니다 :
public class CountDownRunnable implements Runnable {
private final int hours;
private final int minutes;
private final int seconds;
public CountDownRunnable(int hours, int minutes, int seconds) {
this.hours = hours;
this.minutes = minutes;
this.seconds = seconds;
}
public void run() {
for (int a = hours * 3600 + 60 * minutes + seconds; a >= 0; a--) {
Thread.sleep(1000);
System.out.println(a);
}
// Here goes your code that will be invoked once the timer reaches zero...
}
}
그런 다음 방법은 다음과 같을 것이다 :
private void countDownTimer() throws InterruptedException {
(new Thread(new HelloRunnable())).start();
}
누구든지 도와주세요 제발 ??? –
https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html#scheduleAtFixedRate(java.util.TimerTask,%20long,%20long) –