Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从java中的独立线程操作变量?_Java_2d Games - Fatal编程技术网

如何从java中的独立线程操作变量?

如何从java中的独立线程操作变量?,java,2d-games,Java,2d Games,早上好, 我有个问题。 我需要操作一个在线程中修改的变量 new Timer(5000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { color=colorRandom(); } }).start(); 其中:颜色是设置为白色的全局变量, colorRandom()是一种生成并返回随机颜色(黑色、白色或红色)的方法 最后,我尝试检查

早上好, 我有个问题。 我需要操作一个在线程中修改的变量

new Timer(5000, new ActionListener() 
{
    @Override
    public void actionPerformed(ActionEvent e) 
    {
        color=colorRandom();
    }
}).start();
其中:颜色是设置为白色的全局变量, colorRandom()是一种生成并返回随机颜色(黑色、白色或红色)的方法

最后,我尝试检查椭圆(另一个对象)的颜色是否与矩形相同。 所以我这样做了:

public boolean checkColor()
{
    return ellipseColor.equals(rect.color);
}
这是行不通的。 它没有返回正确的值。 即使两个对象的颜色相同,也表示颜色不同。 在将椭圆和矩形的颜色都设置为白色后,我也尝试了这种方法

这是真的! 所以checkColor方法看起来不错。 这个问题,, 在第一种情况下, 就是变量没有被正确操作。 有什么建议吗?
我也试过锁,因为一个朋友告诉我试一下,但它仍然不起作用。

问题在于你用来比较颜色的方法。 有关比较颜色的正确方法,请参见此处的答案

使用ColorA==ColorB只会在某些时候起作用。 特别是,如果两个引用都引用Color.WHITE对象。
如果一个是Color.WHITE,另一个是new Color(255,255,255),这将不起作用,因为它们是不同的对象。

该死,我不知道
euqals
方法,它做什么?它比较两种颜色!!在基本体变量上,可以使用==但在必须使用的对象上。只是一点无害的乐趣:)。但是为什么你把
checkColor
代码段发了两次?您不是想发布其他代码吗?请尝试将
颜色设置为variable
volatile
。有时线程使用自己的缓存而不是进入
,这可能会导致线程之间的值不一致。它们是相同的类型。。两种颜色!!例如,我试着做“if(ellipseColor.getRGB()==rectColor.getRGB()”,但这就像说“ellipseColor.equals()”。。。我真的不知道怎么解决这个问题。。我从4天起就被解雇了:/
public boolean checkColor()
{
    return ellipseColor.equals(rect.color);
}