bugfix> java > 投稿

私は、カードをクリックしてペア(異なるID)ではない場合、プログラムが1秒後にそれらを元に戻す必要があるというロジックをメモリゲームに記述しようとしています。それらが同じ場合は、そのままにしておきます。

問題は、最初にクリックしてカードが表示されたときに、別の(異なる)カードを2回クリックしても表示されず、1秒後に最初のカードが交換されることです。誰かがクリックした後に2枚目のカードが表示されない理由を知っていますか?

ペアが正しい場合、すべてが正常に動作しますが、ここにリスナーのそのロジックを担当するコードの私のフラグメントがあります:

final int copy = i;
 card2.addActionListener((e) -> {
            card2.setIcon(new ImageIcon(icons[copy].getAbsolutePath()));
            if(firstClick == null)
            {
                firstClick = (Card)e.getSource();
            }
            else
            {
                Card secondClick = (Card)e.getSource();
                if(firstClick.getID() != secondClick.getID())
                {
                    try
                    {
                        Thread.sleep(1000);
                    } catch (InterruptedException e1)
                    {
                        //e1.printStackTrace();
                    }
                    firstClick.setIcon(new ImageIcon(background.getAbsolutePath()));
                    secondClick.setIcon(new ImageIcon(background.getAbsolutePath()));
                    firstClick = null;
                }
                else
                    firstClick = null;
            }
        });

回答 1 件
  • whileメソッド actionPerformed  実行中、GUIはマウスおよびキーボードイベントに反応できないため、基本的にコードはGUIを1秒間「フリーズ」します。クラス javax.swing.Timer は  必要なものであり、一見すると、MadProgrammerが言及した重複した質問があなたを助けるかもしれません。

あなたの答え