我是一个java新手,我正在使用netbeans创建一个调度程序。我的软件将从用户那里得到时间和动作,并将这些数据输入到单独的arraylists中。然后我使用javax.swing.timer来启动倒数计时器。当用户输入数据并点击“运行”按钮时,计时器将从数组列表中的第一个元素获取运行时间并开始倒计时。当倒计时时间达到0时,计时器将从数组列表中的下一个元素获得倒计时,依此类推。
我的问题是,计时器运行完美但是当arraylist中没有更多元素时,它仍然不会停止。请帮我解决一下这个。这是我的代码中遇到问题的部分:
private void btnstartRunActionPerformed(java.awt.event.ActionEvent evt) {
countdown = ActionTime.get(0);
Action.setText(ActionName.get(c));
timer = new Timer(1000,new ActionListener(){
@Override
public void actionPerformed(ActionEvent event){
if(countdown<=0){
try{
c++;
Action.setText(ActionName.get(c));
//this nested if statement is to check whether the array has any more elements.
//(This is the part that doesn't work.)
if(c >= ActionTime.size()){
timer.stop();
JOptionPane.showMessageDialog(null, "Workout Completed!");
}
countdown=ActionTime.get(c);
timer.restart();
} catch (Exception error2){
}
}
Time.setText(Integer.toString(countdown));
countdown--;
}
});
timer.start();
}
答案 0 :(得分:2)
你应该改变:
c++;
Action.setText(ActionName.get(c)); //move this down
if(c>=ActionTime.size()){
timer.stop();
JOptionPane.showMessageDialog(null, "Workout Completed!");
}
为:
c++;
if(c>=ActionTime.size()){
timer.stop();
JOptionPane.showMessageDialog(null, "Workout Completed!");
return; //add this too as the program should not continue with below
}
Action.setText(ActionName.get(c)); //to here
因为当ActionName.get(c)
的值超过最大可能值时,当您尝试c
时,get
方法将抛出Exception
。这导致我们犯下你的第二个错误:
catch(Exception error2){
}
执行此操作会使程序忽略Exception
并继续,就好像什么都没发生一样。一个容易犯错的错误,欺骗你去思考别的东西是错的,但现在你知道了!将其更改为:
catch(Exception error2){
error2.printStackTrace();
System.exit(-1); //or some error handling
}
或删除try/catch
块,以便Exception
结束您的计划或以其他方式处理。
答案 1 :(得分:0)
这是一个例子:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
public class Main extends JFrame {
Timer timer;
int counter;
Main(String title) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ActionListener a = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Counter = " + counter);
if (++counter > 10) {
timer.stop();
System.exit(0);
}
}
};
timer = new Timer(300, a);
timer.start();
pack();
setVisible(true);
}
public static void main(String[] args) {
new Main("Timer Demo1");
}
}