0

我制作了一个音频播放器,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 时,应用程序启动但它是空白的并且它阻塞并且我得到:

在此处输入图像描述

你能告诉我我做错了什么或有什么问题吗?提前致谢!

4

2 回答 2

1

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

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

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

于 2013-05-03T01:43:13.647 回答
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 样式的文件名与 . 这些不是文件名,而是与类文件一起存在于 jar 中或有时独立于磁盘或服务器上的 Java 资源。

理论上,getResourceAsStream 将在本地类路径、jar 和加载类文件的目录中查找。

于 2013-05-03T01:29:27.070 回答