我在这里阅读了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()方法以及原因。
答案 0 :(得分:2)
您可以在startThinking
方法
startThinking() {
new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
// do your work here
return null;
}
}.execute();
}
你想在另一个Thread中的Swing应用程序中进行任何繁重的工作。您甚至可以使用另一个扩展SwingWorker的类来调用,并在startThinking方法内部执行。 希望这能引导你朝着正确的方向前进!