执行jar问题 - 未捕获错误提取图像

时间:2013-05-03 01:17:27

标签: java image executable-jar

我制作了一个音频播放器,这个罐子是用netbeans制作的。加载我用过的图像:

    ClassLoader cl = this.getClass().getClassLoader();
    URL playerIconURL = cl.getResource("tp/audioplayer/Images/icon.png");
    if (playerIconURL != null){

        ImageIcon playerIcon = new ImageIcon(playerIconURL);
        frame.setIconImage(playerIcon.getImage());
    }
    else{

        System.err.println("cannot load player icon");
    }

我提到文件夹Images在src / tp / audioplayer中。

当我在netbeans中运行应用程序时,一切都很好,但是当我在命令提示符下执行jar时,应用程序启动但是它是空白的,它会阻塞并且我得到:

enter image description here

你能告诉我我做错了什么或者问题是什么?提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果tp在你的类路径中,如果tp不是源文件夹(但仍添加到构建路径中,则必须用cl.getResource("/tp/audioplayer/Images/icon.png")加载它。

如果您将tp添加为源文件夹,那么 cl.getResource("/audioplayer/Images/icon.png")

请注意,jar是区分大小写的,请确保使用区分大小写的文件路径。

答案 1 :(得分:0)

尝试以下任何一项:

// using getResourceAsStream
InputStream is = this.getClass().getResourceAsStream( "picture.gif" );
// or
InputStream is = MyClass.class.getResourceAsStream( "stuff.ser" );
// or
InputStream is = MyApp.class.getClassLoader().getResourceAsStream( "InWords.properties" );

jar文件中的资源必须使用与您调用getResourceAsStream的类相同的包名限定。或者,您可以使用以/开头的绝对名称,其中点映射到/ s。如果您没有潜在客户/,则您拥有相对名称,并且将添加包名称。如果使用/,则必须自己包含软件包的名称,或者在jar中提供资源的名称。 例如,您可以指定/com/mindprod/mypackage/mystuff.ser或/com.mindprod.mypackage.mystuff.ser或仅指定mystuff.ser。不要使用Windows样式文件名。这些不是文件名,而是与类文件一起存在的Java资源,可以放在罐子里,有时也可以放在磁盘上或服务器上。

理论上,getResourceAsStream将查看本地类路径,jar中以及加载类文件的目录。