我应该在哪里放置工作线程

时间:2017-07-19 19:41:03

标签: java multithreading swing swingworker

我在这里阅读了Swing并发Concurrency in Swing,但我不明白在我的项目中执行工作线程的位置 我有一个面板绘制它的组件,如果点击了某些东西,它会从另一个对象调用一个方法。小组类似乎是这样的。点击鼠标后,我们调用board方法callAI();

public class BoardPanel extend JPanel implements MouseListener , MouseMotionListener 
{
    private Board myBoard;

    public BoardPanel()
    {
        //////////// Some code here
    }

    public void paintComponent(Graphics g)
    {
        ///Some code here
    }

    public void mouseClicked(MouseEvent event)
    {
        ///Some changes in the panel components. 
        repaint();
        myBoard.callAI();
    }
}

董事会课程的实施方式如下。 callAI()方法,调用类AIPlayer的对象播放器的方法startThinking()。这是在方法startThinking()完成后消耗CPU并使面板冻结并重新绘制的方法。

public class Board
{
    private AIPlayer player;

    public Board()
    {
        //some code here.
    }

    public void callAI()
    {   
        player.startThinking();
    }

}

据我所知,我需要使用工作线程。但我不明白我应该在哪个课程中使用它。我认为它与Swing组件有关,所以我需要在BoardPanel类中使用它,但我不能扩展SwingWorker类,因为我已经扩展了JPanel。我应该在BoardPanel类中使用任何匿名类吗? 所以我的问题是,我应该在哪里扩展SwingWorker类并使用doInBackground()方法以及原因。

1 个答案:

答案 0 :(得分:2)

您可以在startThinking方法

中使用匿名SwingWorker
    startThinking() {     
        new SwingWorker<Void, Void>() {
                @Override
                public Void doInBackground() {
                    // do your work here

                    return null;
                }
        }.execute();
    }

你想在另一个Thread中的Swing应用程序中进行任何繁重的工作。您甚至可以使用另一个扩展SwingWorker的类来调用,并在startThinking方法内部执行。 希望这能引导你朝着正确的方向前进!