私はスウィングの同時実行性についてここではConcurrency in Swingを読んでいますが、私のプロジェクトでワーカースレッドをどこで実行するのかはわかりません 私はパネルを使ってコンポーネントをペイントしています何かがクリックされた場合。パネルクラスはそういう感じです。マウスをクリックした後、ボードメソッド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クラスで使う必要がありますが、JPanelを既に拡張しているのでSwingWorkerクラスを拡張することはできません。私はBoardPanelクラスの中で匿名のクラスを使うべきですか? 私の質問は、どこでSwingWorkerクラスを拡張し、doInBackground()メソッドを使用すればよいのでしょうか。
はい、これが正しい方向だった、ありがとう –