我正在点击游戏程序。用户必须键入时间限制(以秒为单位)。如果值为正,则启用单击按钮。当时间用完时,单击按钮将被禁用。这是我当前代码的一部分: 我似乎无法使用setInterval()返回的值,并在计时器到达0后禁用我的Click按钮。
public void actionPerformed(ActionEvent a) {
if (a.getSource()==startButton){
try{
String sec = timeField.getText();
int delay = 1000;
int period = 1000;
timer = new Timer();
interval = Integer.parseInt(sec);
if(interval > 0){
timeLeft.setText("Time left: " + sec);
timeLeft.setText("Start!");
clickButton.setEnabled(false);
if(setInterval() > 0){
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
timeLeft.setText("Time left: " + String.valueOf(setInterval()));
}
}, delay, period);
clickButton.setEnabled(true);
}else{
System.out.print(String.valueOf(setInterval()));
clickButton.setEnabled(false);
}
} else {
JOptionPane.showMessageDialog(null, "Error! Please enter postivie Interger! ", "Error", JOptionPane.ERROR_MESSAGE);
}
}
catch(NumberFormatException e){
JOptionPane.showMessageDialog(null, "Error! Please enter Integer! ", "Error", JOptionPane.ERROR_MESSAGE);
}
}
else if(a.getSource()==clickButton)
{
clickCOunter++;
clickLabel.setText("Clicks: " + clickCOunter);
}
}
private static final int setInterval() {
if (interval == 1)
timer.cancel();
return --interval;
}
答案 0 :(得分:1)
在你的情况下,我会放置一个System.out.println(setInterval());在if(setInterval() > 0) {
支票正上方。这样你就可以观察到价值变化的方式。
作为一般提示,您不必使用String.valueOf(...)
来打印数字。删除它也将使您的代码更容易阅读。
另外,请务必排列花括号({})。这也将使您的代码更易于阅读和调试。
最后,如果我可以提出一个建议,会对你的问题采取稍微简单的方法。如果您使用Swing计时器,则可以在actionPerformed()
方法之外创建它,并将其设置为定期调用actionPerformed()
。这样,actionPerformed()
内的逻辑可以简化很多。
请查看Swing计时器的文档。Swing Timer docs