我试图实现一个小的DigitalWatch类与Java中的最小接口(只是一个练习)的某种模式。如何通过点击按钮取消潜在的无限循环?
它有2个按钮:一个模式按钮和一个增量按钮。
模式按钮有一个监听器,它触发我的程序状态在“SetHours,SetMinutes,DisplayTime”之间的变化(由于模式而存在的对象,对象在我的DigitalWatch类中调用特定的状态依赖方法) 。
我的方法displayTime()
是这样的:
void displayTime()
{
while (pressed==false)
{
try
{
display.setText(String.format("%02d:%02d", hours, minutes));
display.repaint();
Thread.sleep(1000);
minutes = minutes + 1;
if (minutes > 59)
{
minutes = 0;
hours = hours + 1;
}
if (hours > 23)
{
hours = 0;
}
display.setText(String.format("%02d:%02d", hours, minutes));
display.repaint();
} catch (Exception e)
{
break;
}
}
display.setText(String.format("%02d:%02d", hours, minutes));
display.repaint();
}
但似乎,虽然这一循环被激活按钮失去其可点击。
所以,一旦“时间计数”我坚持这种状态,我不能再改变模式。有没有一种好方法/最佳做法来保持我的模式按钮的可点击性?
[防止Swing GUI的后台任务期间锁定了(可能的重复http://stackoverflow.com/questions/940913/prevent-swing-gui-locking-up -during-a-background-task) – Raniz
您正在阻止您的Event调度线程。即你的gui线程。您需要将该代码放在单独的线程中。更新gui元素应该在edt上完成。所以你需要把它分开。 – Fildor
这让我想到了一个可能很愚蠢的问题:我的案例edt在哪里? – Wolfone