每1秒打印一次数组

时间:2015-03-08 02:38:20

标签: java swing

我想制作一个每1秒循环一次数组的游戏,然后当' x'键被按下阵列停止打印,下一个' x'按键,阵列从当前元素恢复并再次循环。我的游戏以x开头,如果我再次按下,则每1秒打印一次。我如何添加功能并跟踪卡片中的卡片

我的程序是在java框架中

public class Game {

private JFrame frame;
public static String[] cards = { "Jack", "Queen", "King" };

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Menu window = new Menu();
                Timer timer = new Timer();
                window.frame.setVisible(true);

                //timer for card loops
                timer.schedule(new GoCards(cards), 0, 1000);

                window.frame.addKeyListener(new KeyListener() {

                    @Override
                    public void keyPressed(KeyEvent e) 
                    {
                        char key = e.getKeyChar();

                        if(key == 'x')
                        {                           
                            //pause the timer and if i press again then resume timer
                            timer.cancel();
                        }


                    }
                });

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
}

class GoCards extends TimerTask
{
    String[] deck;

    public GoCards(String[] cards)
    {
        deck = cards;
    }

    public void run()
    {
        for(int i = 0; i < 3; i++) 
        {
            Thread.sleep(1000);
            System.out.println(deck[i]);
        }
    }

2 个答案:

答案 0 :(得分:1)

你的是一个Swing应用程序,所以不,不要使用Thread.sleep(...),除非你想冒着整个GUI进入睡眠的风险,并且不要使用java.util.Timer ,因为这与Swing事件线程不兼容。相反,你会想要使用最适合这项工作的工具 - 一个Swing Timer,又名javax.swing.Timer。可以通过调用start()来启动Timer,只需调用stop()即可停止,并在其构造函数中设置延迟(以毫秒为单位)。此外,使用KeyListener是有风险的,因为如果有任何东西(例如JButton)窃取了焦点,它就无法工作。最好使用Key Bindings。您可以在此处找到Swing教程和其他Swing资源的链接:Swing Info

答案 1 :(得分:0)

您可以使用等待

等计时器
Thread.sleep(milliseconds);

然后使用新计数器跟踪每个按键/迭代次数。

检查按键是一个简单的处理它们的问题,或者是任意检查任何特定键的每次迭代。