我的容器中有一个对象的两个副本,它们是同步的(不是 Java 意义上的,只是因为无论我对一个对象做什么,我也对另一个对象做)。他们都描绘出使用箭头键绘制的图案。
问题是颜色偶尔会随机恢复为黑色,这是不可预测的(对于两个对象来说不是同时)。这是我认为所有相关的代码;肯定所有时间 setColor 被称为:
public class UserRavelDialog extends Component implements Runnable {
...
in init():
colors = new Color[] {
new Color (245, 240, 80), //set colors for the elements
new Color (100, 50, 50),
new Color (255, 0, 0),
new Color (255, 0, 200),
new Color (0, 0, 200)};
bb.setColor(colors[0]); //bb is the backbuffer graphics object
public void render(){ //this draws the current color around a black cursor, or white if inactive
Color temp = bb.getColor();
if(temp.equals(Color.black))
System.out.print("!");
if (!isActive)
bb.setColor(Color.white);
bb.fillRect((int)p.x - 1, (int)p.y - 1, 3, 3); //p is a Point2D.Double for the cursor position
bb.setColor(Color.black);
bb.fillRect((int)p.x, (int)p.y, 1, 1);
bb.setColor(temp);
update(getGraphics());
}
private void toggleColour(int arg) {
if (arg < colors.length)
bb.setColor(colors[arg]);
}
public void keyPressed(KeyEvent e){
for (int i = 0 ; i < colors.length ; i++){
if (e.getKeyCode() == keys[i+9])
toggleColour(i);
}
}
因此,当我创建可能的颜色选项时,在 init 中调用 setColor,当用户按下键更改颜色时,在 toggleColour 中调用 setColor,它用于渲染,但总是重新设置为当前颜色。
奇怪的是,if (temp.equals(Color.black))
当翻转发生时条件被输入,所以看起来好像bb.setColor(temp)
刚刚没有发生在之前的渲染中......
为什么会发生这种情况,我该如何解决它?