Java Swing计时器避免重复

Java Swing计时器避免重复,java,swing,timer,Java,Swing,Timer,在这个网站慷慨的用户的帮助下,我成功地使我的计时器在我正在设计的程序中正常工作。下面是代码的一小部分: //Class represents what do when a button is pressed private static class ButtonHandler implements ActionListener { public void actionPerformed (ActionEvent e) { them.setText("");

在这个网站慷慨的用户的帮助下,我成功地使我的计时器在我正在设计的程序中正常工作。下面是代码的一小部分:

//Class represents what do when a button is pressed
private static class ButtonHandler implements ActionListener { 
    public void actionPerformed (ActionEvent e) {
        them.setText("");
        final JButton button = (JButton)e.getSource();
        Timer timer = new Timer(1000, new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
                        final String tc = random();
                        them.setText("They chose: " + tc + "!");
                        Timer timer = new Timer(1000, new ActionListener() {
                                    @Override
                                    public void actionPerformed(ActionEvent e) {
                                        if (button == rock) {
                                            whoWins("rock", tc);
                                        } else if (button == paper) {
                                            whoWins("paper", tc);
                                        } else if (button == scissors) {
                                            whoWins("scissors", tc);
                                        }
                                        yourWins.setText("Your wins: " + yw);
                                        theirWins.setText("Their wins: " + tw);
                                    }
                                });
                        timer.setRepeats(false);
                        timer.start();

                    }
                });
        timer.setRepeats(false);     
        timer.start();
    }       


}
我想做的是避免为了让它们连续开火而定义多个计时器。如果可以创建一个计时器类,在需要延迟时调用它,那将是最好的。如果我需要将“new ActionListener()”替换为“this”或其他内容,请通知我。我是java新手,我想弄清楚这一点,这样我就可以继续从事各种家庭项目。

你可以。。。 为需要执行的每个操作创建一个类,实现
ActionListener
。您需要提供适当的方法来设置在类之间需要携带的状态

然后为您需要的每个
计时器创建一个实例,并为其分配适当的操作类(您之前创建的),并根据您的需要在需要时使用
isRunning
restart

你可以。。。 创建一个
ActionListener
和一个
Timer
的实例以及某种状态标志

ActionListener
将检查标志的状态,并根据其值采取适当的操作

需要时,可以设置标志状态并启动
计时器

IMHO,这使得代码相当不灵活,因为所有状态都被分组在一起,而不是被隔离在单独的块中

您也可以使用此想法,但不需要在外部设置标志,只需在启动
计时器时准备状态,并允许
ActionListener
更改状态,然后在
计时器的每个刻度上设置标志


这意味着您可以将
计时器设置为重复,并且每个勾号将执行不同的操作,当您的任务完成时,停止
ActionListener
中的
计时器。

我将使用一个,并简单地从上一个任务中安排一个新任务。不要忘记使用
SwingUtilites.invokeLater
运行代码-否则您将违反Swing的线程策略。@HoverCraftFullOfels,按下按钮后,程序将休眠1000毫秒,然后显示一条消息,然后再次休眠并显示另一条消息。我想压缩它,所以我不需要重写定时器=新定时器等。。。只需键入一个处理计时器的类的名称。什么是标志?你的意思是检查某些条件的声明吗?然后在actionlistener中,我会根据某些操作更改标志,比如在显示消息之后?@user3534031:是的,这是我的建议——一个简单的计时器,根据其状态更改行为。