我在编写另一个项目时遇到了这个问题,但我已将代码简化为直接受到上述问题影响的内容。
EntryPoint.java
package replaced.with.real.package.in.code.at.compile.time;
import java.awt.image.BufferedImage;
import java.util.Random;
public class EntryPoint {
public static void main(String[] args) {
BufferedImage a = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
BufferedImage b = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
a = Util.genOriginBlue();
b = Util.genOriginBlue();
a.setRGB(new Random(0L).nextInt(500), new Random(1L).nextInt(500), 0xffffff);
System.out.println(a == b);
}
}
Util.java
package replaced.with.real.package.in.code.at.compile.time;
import java.awt.image.BufferedImage;
public class Util
{
static BufferedImage oB;
public static BufferedImage genOriginBlue()
{
if(oB == null)
{
oB = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
oB.setRGB(0, 0, 1, 1, new int[] {255}, 0, 1);
}
return oB;
}
}
打印' true'表示BufferedImage a和BufferedImage b相同。看到我以相同的方式生成它们直到行开始' a.setRG(....'使BufferedImage变得不同,我不希望输出。如果我开始循环代码,这会变得更糟像这样,但特别是每次生成输出BufferedImage的代码都不同,这正是我在上述项目中所做的。
提前感谢您提供的任何帮助。
另外,这是我在这里发布的第二个问题,所以请说出来,如果我做得不对。
干杯。
答案 0 :(得分:2)
BufferedImage a = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
BufferedImage b = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB);
上面的代码行什么都不做,因为在以下两行代码中你重置了" a"和" b"变量到Util.GenOriginBlue()方法返回的值。
a = Util.genOriginBlue();
b = Util.genOriginBlue();
然后在您的Util类中使用:
static BufferedImage oB;
这意味着您将只拥有BufferedImage的单个实例。因此,代码中的if语句只会执行一次,然后第二次调用该方法时,只需返回对BufferedImage的相同引用。
您需要在Util.genOriginBlue()方法中创建BufferedImage的新实例。所以摆脱静态" ob"变量并删除if语句。然后,当您创建BufferedImage时,它将是相同的,但您可以单独更改像素。