1

私は JFrame を使用してプログラムを開発しています。ボタンをクリックすると、他のクラスのループが機能する必要があることを認識したいと思います。それは働いていますが、とても遅いです。1 秒間に、ループの反復が 1 回だけ表示されます。理由がわかりません。知っておく必要のあるコードがあります。呼び出しリスナー:

playWithComputerButton.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            startLoop(1);
        }
    });

コールピース:

if(gameMode == 2){
        int i = 0;
        while(i < 500){
            int pos = ((Computer) playerA).thinkIt(board.getBoard());
            display("bu pas : " + pos);
            i++;
        }

反復と呼び出しリスナーに問題はありません。(他の反復と「ActionListener」でも試しましたが、結果は同じです。

解決策は何ですか?

4

1 に答える 1

0

GUIに関係のない長い操作を実行するには、Nikolay KuznetsovとMadProgrammerが上で説明したように、javax.swing.SwingWorkerを使用するだけです。

これはそれを使用する方法の例です: とここにSwingWorkerのjavadocがあります:javadoc

私のプログラムの場合、解決策は次のとおりです。

まず、JFrameクラスに新しいSwingWorker拡張クラスを作成します

class LoopWorker extends SwingWorker<Integer, Integer>
{
    protected Integer doInBackground() throws Exception
    {
        // perform your loop
    }

    protected void done()
    {
        // what has to be done after performing
    }
}

次に、ボタンは次のように実行メソッドを呼び出す必要があります。

learnButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent evt) {
            new LoopWorker().execute();
        }
     });
于 2012-12-15T02:48:34.767 に答える