虽然循环不接受我输入的密钥 - Java AWT

时间:2015-01-12 23:55:38

标签: java multithreading while-loop awt

我在我的方法中使用了while循环

public void keyTyped (KeyEvent e)

这里的问题是,程序进入循环,它要求用户输入。如果输入在参数内,由“while”设置,它只是无限地重复输入。虽然我确实为它添加了代码,但它并没有再次要求输入。

我需要的是每次循环时都要求用户输入。有帮助吗?

//cardChosen1 is "null" at this point`
            while (cardChosen1 < 97  || cardChosen1 > 108)
            {

                Thread.currentThread ().setPriority (Thread.MIN_PRIORITY);
                cardChosen1 = e.getKeyChar ();
                System.out.println ("Inside Loop" + cardChosen1);

                repaint ();
                try
                {
                    // Stop thread for 20 milliseconds
                    Thread.sleep (20);
                }
                catch (InterruptedException ex)
                {
                    // do nothing
                }
                Thread.currentThread ().setPriority (Thread.MAX_PRIORITY);
            }

2 个答案:

答案 0 :(得分:1)

与大多数GUI框架一样,AWT是事件驱动的。也就是说,您使用API​​注册某种回调/观察者/侦听器,并等待该回调/观察者/侦听器被通知已发生的事情。

您必须记住,GUI不是代码的线性进展,而是事件可以在任何时间以任何顺序发生,您需要为这些事件编码。

首先看看Event Dispatching Thread,了解生成事件的核心机制,并在基于AWT的框架内进行通知。

然后查看How to write KeyListeners,了解如何通知您的计划中的重要事件。

如果没有更多有关您要实现的内容的详细信息,很难提供更多信息,但实际上,从不阻止EDT,这将阻止它处理事件队列中的新事件并使其看起来像您的程序已挂起(因为它本质上有)

答案 1 :(得分:0)

这是处理此事件的好方法:

    addKeyListener(new KeyListener() {

        @Override
        public void keyTyped(KeyEvent event) {
            cardChosen1 = event.getKeyChar();
            if(cardChosen1 > 97  && cardChosen1 < 108){
                // do something about the chosen card
            }else{
                // ask user to do something else
                // or press the key in a valid range
            }
        }

        @Override
        public void keyPressed(KeyEvent e) {}
        @Override
        public void keyReleased(KeyEvent e) {}
    });