我正在为一个项目制作一个启动画面,它会显示一个图标并显示一个加载栏。加载栏等工作。这是图像加载和分配代码:
initComponents();
BufferedImage buff = null;
try
{
buff = ImageIO.read(getClass().getResourceAsStream("/Resources/Barcode-icon.png"));
} catch (IOException e)
{
e.printStackTrace();
}
lblSplash = new JLabel(new ImageIcon(buff));
this.setVisible(true);
这被添加到Splash类的构造函数中,但它在运行时显示了损坏的图像图标...
感谢任何帮助(强调帮助,我想学习,没有代码示例答案)
编辑:将此添加到代码中,从未解雇过:
if(new File("/Resources/Barcode-icon.png").exists())
{
JOptionPane.showMessageDialog(null, "exists");
}
同样将文件字符串更改为其他内容会导致程序崩溃,同时尝试了
"资源/条码-的icon.png"
" SRC /资源/条码-的icon.png"
它导致ImageIO.read(...)
方法
答案 0 :(得分:1)
资源不是文件,因此文件现有并不能证明资源存在,实际上同一路径不太可能同时适用于两者。资源通常位于jar文件本身,尽管它也可以位于类路径上目录的相应子目录中。
将getResourceAsStream()的结果放在变量中以确保它不为空。
" /Resources/Barcode-icon.png"并不意味着您应该在计算机上找到该文件,这意味着如果您解压缩正在分发应用程序的jar文件,您应该找到它。
您需要告诉构建系统或IDE将其放在jar文件中。通常这意味着放入一个特殊的目录,但不是你传递给getResourcesAsStream()的目录。
使用Netbeans Ant项目(Java的默认类型),您将文件放在src子目录下,但不要将src /添加到资源字符串。
例如 使用getResourcesAsStream访问src / dir / lena1.png(" dir / lena1.png")
另请注意,getResourcesAsStream(" /dir/lena1.png")将无效。
答案 1 :(得分:0)
使用JLable.setIcon(buff)
可以使用buff是资源,而不是流