我制作了一个音频播放器,这个罐子是用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时,应用程序启动但是它是空白的,它会阻塞并且我得到:
你能告诉我我做错了什么或者问题是什么?提前谢谢!
答案 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中以及加载类文件的目录。