我应该把工作线程放在哪里
where should I put the worker thread
我在此处阅读了有关 Swing 并发的信息 Concurrency in Swing,但我不明白在我的项目中的何处执行我的工作线程
我有一个面板,它绘制它 component ,如果单击某些东西,它会从另一个对象调用一个方法。面板 class 似乎是这样的。单击鼠标后,我们调用棋盘方法 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();
}
}
板class实现如下。 callAI()方法,调用classAIPlayer对象播放器的startThinking()方法。这是消耗 CPU 并在方法 startThinking() 完成后使面板冻结并重新绘制的方法。
public class Board
{
private AIPlayer player;
public Board()
{
//some code here.
}
public void callAI()
{
player.startThinking();
}
}
据我了解,我需要使用辅助线程。但是我不明白我应该在哪个 class 中使用它。我认为它与 Swing 组件有关,所以我需要在 BoardPanel class 中使用它,但我无法扩展 SwingWorker class 因为我已经扩展了 JPanel。我应该在 BoardPanel class 中使用任何匿名 class 吗?
所以我的问题是,我应该在哪里扩展 SwingWorker class 并使用 doInBackground() 方法以及为什么。
您可以在 startThinking
方法中使用匿名 SwingWorker
startThinking() {
new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
// do your work here
return null;
}
}.execute();
}
您想在另一个线程中的 Swing 应用程序中执行任何繁重的工作。您甚至可以将另一个扩展 SwingWorker 的 class 用于调用,并在 startThinking 方法内部执行。
希望这能引导您朝着正确的方向前进!
我在此处阅读了有关 Swing 并发的信息 Concurrency in Swing,但我不明白在我的项目中的何处执行我的工作线程 我有一个面板,它绘制它 component ,如果单击某些东西,它会从另一个对象调用一个方法。面板 class 似乎是这样的。单击鼠标后,我们调用棋盘方法 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();
}
}
板class实现如下。 callAI()方法,调用classAIPlayer对象播放器的startThinking()方法。这是消耗 CPU 并在方法 startThinking() 完成后使面板冻结并重新绘制的方法。
public class Board
{
private AIPlayer player;
public Board()
{
//some code here.
}
public void callAI()
{
player.startThinking();
}
}
据我了解,我需要使用辅助线程。但是我不明白我应该在哪个 class 中使用它。我认为它与 Swing 组件有关,所以我需要在 BoardPanel class 中使用它,但我无法扩展 SwingWorker class 因为我已经扩展了 JPanel。我应该在 BoardPanel class 中使用任何匿名 class 吗? 所以我的问题是,我应该在哪里扩展 SwingWorker class 并使用 doInBackground() 方法以及为什么。
您可以在 startThinking
方法中使用匿名 SwingWorker
startThinking() {
new SwingWorker<Void, Void>() {
@Override
public Void doInBackground() {
// do your work here
return null;
}
}.execute();
}
您想在另一个线程中的 Swing 应用程序中执行任何繁重的工作。您甚至可以将另一个扩展 SwingWorker 的 class 用于调用,并在 startThinking 方法内部执行。 希望这能引导您朝着正确的方向前进!