JAppet加载图片

时间:2014-08-01 12:49:07

标签: java static initialization java-2d japplet

我使用JFrame制作游戏,现在我想在JApplet中部署它,但是我得到以下异常:

  

java.lang.ExceptionInInitializerError

Google告诉我它是由静态初始化器引起的,我在静态初始化块中唯一要做的就是调用以下函数:

public static BufferedImage[] loadAnimation (String fileName, int subimagewidth, int subimageheight, int pixelsbetweensprites) {


    BufferedImage spr = null;
    BufferedImage[] animation;

    int x, y;           //amount of images in each direction

    try {
        Object ob = new Object();
        spr = ImageIO.read(ob.getClass().getResourceAsStream(fileName));
    } catch (IOException ex) {
        System.exit(0);
        Logger.getLogger(AnimationLoader.class.getName()).log(Level.SEVERE, null, ex);
    }

    x = spr.getWidth() / subimagewidth;
    y = spr.getHeight() / subimageheight;

    animation = new BufferedImage[x*y];

    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            animation[j*x+i] = spr.getSubimage(i*(subimagewidth + pixelsbetweensprites), j*(subimageheight+pixelsbetweensprites), subimagewidth, subimageheight);
        }
    }

    return animation;

}

是否出现此问题是因为它是JApplet,还是因为它是未签名的? 如何修复它(最好不要在签名上花钱)?

1 个答案:

答案 0 :(得分:1)

此:

Object ob = new Object();
spr = ImageIO.read(ob.getClass().getResourceAsStream(fileName));

您可能希望从代码源自的相同位置加载图像(例如jar文件)。相反,你要求java.lang.Object.class回馈可能不是你想要的图像流(这将搜索JRE或JDK内部库中的filename资源 - 更具体地说是{{1}文件)。

如果您确实要从类文件来源的同一个jar中加载图像,则应该像这样获取流:

rt.jar

您应将此InputStream in = YourClass.class.getResourceAsStream(filename); 传递给InputStream方法,或将loadAnimation()和文件名一起传递,以获取图片流。