1

我正在使用 JFrame 开发一个程序,我想意识到当你点击一个按钮时,另一个类中的循环必须工作。它正在工作,但速度很慢。在一秒钟内,您只能看到循环的一次迭代。我不明白为什么。您需要了解一些代码。调用监听器:

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 无关的长操作,我们可以简单地使用 javax.swing.SwingWorker,正如上面 Nikolay Kuznetsov 和 MadProgrammer 所解释的那样。

这是一个如何使用它的示例: example,这里是 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 回答