簡體   English   中英

創建VolatileImage始終返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM