![](/img/trans.png)
[英]Why VolatileImage.getGraphics() create always a new instance of Graphics?
[英]Create VolatileImage always return null
我在下面的类中创建一个易失性图像,但每次都遇到NullPointerException。 createVolatileImage()从其JavaDoc返回null的原因是GraphicsEnvironment.isHeadless()为true。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.VolatileImage;
import javax.swing.JPanel;
public class Tube extends JPanel {
private VolatileImage image;
private int width, height;
public Tube() {
super(true);
}
public Tube(int width, int height) {
this.width = width;
this.height = height;
createImage();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(image == null)
createImage();
if(image.validate(getGraphicsConfiguration()) == VolatileImage.IMAGE_INCOMPATIBLE)
createImage();
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
g2.drawImage(image, 0, 0, this);
}
public VolatileImage getBufferedImage() {
return this.image;
}
private void createImage(){
if(image != null){
image.flush();
image = null;
}
image = createVolatileImage(width, height);
image.setAccelerationPriority(1.0f);
}
}
如何返回非null的VolatileImage?
这将更改无头模式:
System.setProperty("java.awt.headless", "false");
您在三种不同的先决条件中调用同一方法createImage()。
1)调用构造函数时
2)当图像字段为空时
3)当图像字段不为空时
您的问题可能出在createImage()方法的实现上。
您没有包括stacktrace,但是构造函数是否抛出了异常? 如果是这样,这可能是由于该组件尚不可显示而发生的,因此createVolatileImage
可能返回null
。 尝试从构造函数中删除createImage
调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.