Java BuffereImage.setRGB()不工作

Java BuffereImage.setRGB()不工作,java,swing,drawing,bufferedimage,Java,Swing,Drawing,Bufferedimage,我有一个正在绘制到JPanel上的BuffereImage。我试图通过以下方式设置BuffereImage的像素: for (int yy = 0; yy < 18; yy++) { for (int xx = 0; xx < 24; xx++) { image.setRGB(xx * 32, yy * 32, 32, 32, pixels, 0, 32); } } for(int-yy=0;yy

我有一个正在绘制到JPanel上的BuffereImage。我试图通过以下方式设置BuffereImage的像素:

for (int yy = 0; yy < 18; yy++) {
    for (int xx = 0; xx < 24; xx++) {
        image.setRGB(xx * 32, yy * 32, 32, 32, pixels, 0, 32);
    }
}
for(int-yy=0;yy<18;yy++){
对于(int xx=0;xx<24;xx++){
setRGB(xx*32,yy*32,32,32,像素,0,32);
}
}

像素被定义和实例化,18是图像的高度/32,24是图像的宽度/32。这种方法似乎有效,但只有一半的时间有效。发生的情况是,它有时会绘制所有图像,有时可能会绘制图像的前三分之一(然后停止),有时会绘制图像的前五分之一,然后跳到图像的另一部分,在那里绘制一些图像,然后停止。没有抛出错误,应用程序没有暂停或加载。有时有效,有时无效。出现这种情况的原因是什么?

我猜这是一个线程问题,因为您显示的代码可能需要相当长的时间(相对而言)才能工作,为了让它在Swing中发挥最佳效果,您必须确保在后台线程中运行它,然后在完成时通知GUI,然后让GUI更新图像。A对此很有用。

我没有提到它在swingworker中。但是,我有另一个线程(不是调用swingworker的线程)不断地重新绘制图像,所以这可能会造成干扰?另外,通知GUI是什么意思?@kneedhelp:notify是指在SwingWorker上调用
get()
来检索图像,并在这个嵌套循环完成其功能后在GUI上调用
repaint()
。我通常使用PropertyChangeListener来实现这个目的。哦,你的意思是像使用swingworker返回一个BuffereImage来返回一个BuffereImage,然后在JPanel上绘制它一样?@kneedhelp:是的。或者,即使您没有返回BuffereImage,如果您试图在体外更改它,您仍然需要在更改完成后通知GUI重新绘制。在SwingWorker上调用
get()
,无论是否使用返回的内容,因为这是从worker中捕获异常的方式。如果仍然卡住,发布你的.你永远不会相信这一点,但我添加了
System.out.println(像素)而且它起作用了(在我换了swingworker之后。)所以我猜这是时间问题还是什么。谢谢