Java;调整窗口大小后,paint(Graphics)调用过多!
|
我有个问题。最近,我正在研究使用Java实现硬件渲染的方法。我的目标不是使用诸如OpenGL之类的外部库。我在网站上找到了一篇帖子,其中详细介绍了操作方法。
这就是代码的含义(我将某些项目重命名):
@Override
public void paint(Graphics g) {
createVolatileImage();
do {
GraphicsConfiguration gc = getGraphicsConfiguration();
Graphics offscreenGraphics = volatileImage.getGraphics();
int validationCode = volatileImage.validate(gc);
if (validationCode == VolatileImage.IMAGE_INCOMPATIBLE) {
createVolatileImage();
}
offscreenGraphics.setColor(getBackground());
offscreenGraphics.fillRect(0, 0, getSize().width, getSize().height);
offscreenGraphics.setColor(getForeground());
paint(offscreenGraphics);
g.drawImage(volatileImage, 0, 0, this);
} while (volatileImage.contentsLost());
}
private void createVolatileImage() {
GraphicsConfiguration gc = getGraphicsConfiguration();
volatileImage = gc.createCompatibleVolatileImage(getWidth(), getHeight());
}
不幸的是,如果我调整窗口的大小,paint(Graphics)方法(在Canvas类中)在一秒钟内被调用了1,000次,从而导致OutOfMemoryException。
有人遇到过吗?
在此先多谢!
没有找到相关结果
已邀请:
3 个回复
完趣镐
,每秒可能发生数百次(在您的情况下为一千次)。除非释放ѭ1所使用的内存或解决问题以使分配一次而不是每帧分配一次,否则应用程序的内存空间将迅速膨胀,直到使JVM崩溃。尝试在渲染循环结束时将呼叫添加到“ 5”。另请阅读Javadoc。 编辑: 另一个有用的参考。
缉康怪
瞧叮