gpt4 book ai didi

java - 使用 SwingWorker 的带有 GUI 的倒计时器 - 未正确更新

转载 作者:行者123 更新时间:2023-11-30 04:03:47 25 4
gpt4 key购买 nike

我正在尝试使用 swingworker 制作一个倒计时器,问题是当秒数为零时,程序将它们设置回 60 并扣除 1。我确实在没有 GUI 的情况下制作了该程序,它运行得非常完美,但是使用 swingworker 我的计时器看起来像这样

1:0:2
1:0:1
0:59:60

这有点错误,应该是
1:0:1
1:0:0
0:59:59

我的两个类都遵循相同的逻辑。我猜这与将整个 Time 对象发送到“进程”有关,但我无法向自己解释它。

doInBackground()方法:

protected Void doInBackground() throws Exception {
Integer hours = Integer.parseInt(hoursField.getText());
Integer minutes = Integer.parseInt(minutesField.getText());
Integer seconds = Integer.parseInt(secondsField.getText());

Time time = new Time(hours, minutes, seconds);

if(minutes < 59 & seconds < 59) {
if(hours >=0 & minutes >=0 & seconds >=0) {
boolean count = true;
while(count) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
Logger.getLogger(Chronometer.class.getName()).log(Level.SEVERE, null, e);
}
time.setSeconds(time.getSeconds() - 1);
publish(time);
if(time.getHours() == 0 & time.getMinutes() == 0 & time.getSeconds() == 0) {
count = false;
}
if(time.getSeconds() == 0) {
time.setSeconds(60);
if(time.getMinutes() != 0) {
time.setMinutes((time.getMinutes() - 1));
}else if(time.getMinutes() == 0) {
time.setHours((time.getHours() - 1));
if(time.getHours() >= 0) {
time.setMinutes(59);
}
if(time.getHours() < 0) {
time.setHours(0);
}
}
}

}
}else {
System.exit(0);
}
}
return null;
}

这是一个简单的 java 类,其工作原理相同:

boolean count = true;
while(count) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {

}
seconds--;
System.out.println(hours + ": " + minutes + ": " + seconds);
if(hours == 0 & minutes == 0 & seconds == 0) {
count = false;
}
if(seconds == 0) {
seconds = 60;
if(minutes != 0){
minutes--;
}else if(minutes == 0) {
hours--;
if(hours >=0){
minutes = 59;
}
if(hours < 0) {
hours = 0;
}
}
}
}

如果有人能指出我的错误,我将不胜感激。谢谢

添加处理方法

public void process(List<Time> time) {
for(Time t : time) {
showField.setText(String.valueOf(t.getHours()) + ": " + String.valueOf(t.getMinutes())+ ": " + String.valueOf(t.getSeconds()));
}
}

最佳答案

你的线路

if(time.getSeconds() == 0) time.setSeconds(60);

需要

if(time.getSeconds() == 0) time.setSeconds(59);

并反转这条拖线:

time.setSeconds(time.getSeconds() - 1);
publish(time);

像这样:

publish(time);
time.setSeconds(time.getSeconds() - 1);

推导是正确的,但它没有显示结果,因为当秒达到 cero 时,它就会执行条件,而不显示中间时间。

更改此行:

 if(time.getSeconds() == 0)

对于这个:

 if(time.getSeconds() < 0)

还有这个:

 if(time.getHours() == 0 & time.getMinutes() == 0 & time.getSeconds() == 0)

if(time.getHours() == 0 & time.getMinutes() == 0 & time.getSeconds() < 0)

关于java - 使用 SwingWorker 的带有 GUI 的倒计时器 - 未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21279369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com