我已经创建了一个软件计时器,当计时器为零时,它将启动一个新的登录屏幕。问题是登录一遍又一遍。如何阻止这一切?
class DisplayCountdown extends TimerTask {
int seconds = 0005;
public void run() {
if (seconds > 0) {
int hr = (int) (seconds / 3600);
int rem = (int) (seconds % 3600);
int mn = rem / 60;
int sec = rem % 60;
String hrStr = (hr < 10 ? "0" : "") + hr;
String mnStr = (mn < 10 ? "0" : "") + mn;
String secStr = (sec < 10 ? "0" : "") + sec;
seconds--;
lab.setText(hrStr + " : " + mnStr + " : " + secStr + "");
} else {
login ty = new login();
login.scname.setText(scname.getText());
login.scnum.setText(scnum.getText());
login.mar.setText(jTextField1.getText());
ty.setVisible(true);
dispose();
}
}
}发布于 2013-10-07 13:53:09
这违反了Swing的单线程规则--在事件调度线程的上下文之外更新UI。
您应该使用javax.swing.Timer而不是TimerTask。
javax.swing.Timer swingTimer = new javax.swing.Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (seconds > 0) {
//...
} else {
((javax.swing.Timer)evt.getSource()).stop();
//...
}
}
});看一看Concurrency in Swing
发布于 2013-10-07 13:50:59
目前还不清楚代码是什么,但是您不能使用TimerTask类的" cancel ()“方法来取消它吗?
发布于 2013-10-07 14:06:10
您需要保留以前登录屏幕的引用,并在创建新的登录屏幕之前对其进行处理;
https://stackoverflow.com/questions/19217849
复制相似问题