Java 为什么我的对象的颜色会随机变化?

Java 为什么我的对象的颜色会随机变化?,java,colors,Java,Colors,我的容器中有一个对象的两个副本,它们是同步的(不是Java意义上的,只是我对其中一个做什么,我也对另一个做什么)。它们都用箭头键勾勒出一个图案。 问题是颜色偶尔会不可预测地随机恢复为黑色(而不是同时对两个对象)。 以下是我认为所有相关的代码;当然,setColor始终被称为: public class UserRavelDialog extends Component implements Runnable { ... in init(): colors = new Color[] {

我的容器中有一个对象的两个副本,它们是同步的(不是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);
        }
}
public类UserRavelDialog扩展组件实现可运行{
...
在init()中:
颜色=新颜色[]{
新颜色(245、240、80),//为元素设置颜色
新颜色(100,50,50),
新颜色(255,0,0),
新颜色(255,0200),
新颜色(0,0200)};
setColor(colors[0]);//bb是backbuffer图形对象
public void render(){//这将围绕黑色光标绘制当前颜色,如果不活动,则绘制白色
Color temp=bb.getColor();
如果(温度等于(颜色为黑色))
系统输出打印(“!”);
如果(!isActive)
bb.setColor(Color.white);
bb.fillRect((int)p.x-1,(int)p.y-1,3,3);//p是一个点2d.Double表示光标位置
bb.setColor(颜色为黑色);
bb.fillRect((int)p.x,(int)p.y,1,1);
bb.设置颜色(温度);
更新(getGraphics());
}
专用无效切换颜色(内部参数){
if(arg
因此,当我创建可能的颜色选项时,在init中调用setColor;当用户按键更改颜色时,在togglecolor中调用setColor,它用于渲染,但总是重新设置为当前颜色

奇怪的是,当翻转发生时,
if(temp.equals(Color.black))
条件被输入,所以在上一次渲染时,
bb.setColor(temp)
似乎没有发生…

为什么会发生这种情况?我如何解决它?

此解决方案解决了问题,尽管我不明白原始程序为什么不工作。
如果创建一个(全局)颜色变量,并在init和togglecolor中设置该变量,则可以在渲染中使用该变量,而无需担心temp变量(您想要恢复的颜色的唯一实例)会丢失。因此:

in init():
currColor = colors[0];
bb.setColor(currColor);

public void render(){
    if (!iActive)
        bb.setColor(Color.white);
    bb.fillRect((int)p.x - 1, (int)p.y - 1, 3, 3);
    bb.setColor(Color.black);
    bb.fillRect((int)p.x, (int)p.y, 1, 1);
    bb.setColor(currColor);

    update(getGraphics());
}
private void toggleColour(int arg) {
    if (arg < colors.length) {
        currColor = colors[arg];
        bb.setColor(currColor);
    }
}
init()中的
:
currColor=颜色[0];
bb.setColor(currColor);
公共无效呈现(){
如果(!iActive)
bb.setColor(Color.white);
bb.fillRect((int)p.x-1,(int)p.y-1,3,3);
bb.setColor(颜色为黑色);
bb.fillRect((int)p.x,(int)p.y,1,1);
bb.setColor(currColor);
更新(getGraphics());
}
专用无效切换颜色(内部参数){
if(arg