私の問題は次のとおりです。標準のSWINGイベントディスパッチスレッドを使用して、アルファ値が低い楕円を描画し、中央にもう1つの小さな楕円を描画してその中心を表します。また、シミュレーションを実行するときは、別のスレッドを使用し、シミュレーションの実行中にユーザーがこれらの障害物を追加できるようにします。これで、別のスレッドが実行されていないときは正常に機能しますが、別のシミュレーションスレッドが実行されているときは、大きな楕円(低いアルファで描画されるはずです)は低いアルファ値で描画されないため、ソリッドが作成されます。大きな赤い楕円形。なぜこれが起こっているのですか、どうすればこれを解決できますか?
説明がはっきりしなかった場合はお知らせください。
private void drawObstacleCircle(Obstacle o, Graphics2D g)
{
final double OBSTACLE_CENTER_RADIUS = 2.0;
final double OBSTACLE_RADIUS = o.getRadius(true);
float scaleToUse = Math.max(0.8f, scale);
Vector pos = o.getPosition();
int xPos = (int) (pos.getX() * getBufferedHeightMap().getWidth());
int yPos = (int) (pos.getY() * getBufferedHeightMap().getHeight());
Point positionPoint = convertToPanelPoint(new Point(xPos, yPos));
// Draw the circle where the Obstacle's center is
Graphics2D g1 = (Graphics2D) g.create();
g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g1.setColor(Color.RED);
g1.fillOval(positionPoint.x - (int) (OBSTACLE_CENTER_RADIUS * scaleToUse), positionPoint.y - (int) (OBSTACLE_CENTER_RADIUS * scaleToUse), (int) (OBSTACLE_CENTER_RADIUS * 2 * scaleToUse), (int) (OBSTACLE_CENTER_RADIUS * 2 * scaleToUse));
Color c = Color.RED;
g1.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 100));
g1.fillOval(positionPoint.x - (int) (OBSTACLE_RADIUS * scaleToUse), positionPoint.y - (int) (OBSTACLE_RADIUS * scaleToUse), (int) (OBSTACLE_RADIUS * 2 * scaleToUse), (int) (OBSTACLE_RADIUS * 2 * scaleToUse));
g1.dispose();
g2.dispose();
}