getResource,图像宽度返回-1

时间:2012-01-07 20:19:52

标签: java image jar load

我有以下片段加载图片:

    String imgName = "/assets/" + name;
    URL imgURL = Groovy.class.getResource(imgName);
            System.out.println(imgURL.getPath());
    Toolkit tk = Toolkit.getDefaultToolkit();
    Image image = tk.getImage(imgURL);
    return image;

绘制图像的位置:

        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
        g.setColor(Color.black);
        g.fillRect(0,0,screenWidth,screenHeight);
        g.drawImage(background, 0, 0, null);
        System.out.println(background.getWidth(null));
        if (background.getWidth(null) < 0)
            System.exit(1);

但是imgURL总是返回null。我正在使用Eclipse(并且很新鲜,使用blegh),并使用run或debug选项运行类。如果我改变路径,它会给出一个未找到文件的异常。

文件结构如下:

项目 - &gt; src和资产 - &gt; src有Groovy,资产有图像 - &gt; Groovy有Groovy.class

编辑:我转回Netbeans。 imgURL现在加载正常,getPath返回正确的路径。但是图像宽度/高度返回-1。这是现在的实际问题。

编辑:-1表示宽度尚不清楚,但显示图像显示白屏。

2 个答案:

答案 0 :(得分:1)

Javadoc救援:

  

在委托之前,从中构造绝对资源名称   使用此算法给定资源名称:

     

如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。   否则,绝对名称的格式如下:

       modified_package_name/name
     

其中modified_pa​​ckage_name是此对象的包名称,其中'/'替换为&gt;为'。' ( '\ u002e')。

简而言之:相对路径无法使用..升级。使用绝对名称(从类路径的根开始以/开头)。

此外,getResource从类路径加载资源。如果图像不在类路径中,则不起作用。您的文件树根本不清楚,但似乎您还没有理解类路径是什么。如果要从文件系统加载文件,请使用文件IO,而不是资源。

答案 1 :(得分:0)

问题在于使用工具包来获取图像,可能是因为我正在使用OpenJDK?无论如何,使用ImageIO.read(imgURL)修复此问题。