导出jar文件中的资源
Export resource in jar file
我在将带有后台资源的 Jframe 应用程序导出到 jar 文件时遇到问题(没有任何外部资源文件夹。我更喜欢将所有内容都放入 jar 文件中以获得更好的可移植性)。
这是代码。在 Eclipse 上一切正常,但是当我导出到 jar 文件时,应用程序不会加载,因为找不到资源 "cccc.jpg"。
我已经尝试过 getResource() 但效果不佳。
// Load Background image
BufferedImage img = null;
try {
img = ImageIO.read(new File("cccc.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
// Set Background image
Image dimg = img.getScaledInstance(640, 480, Image.SCALE_SMOOTH);
ImageIcon imageIcon = new ImageIcon(dimg);
setContentPane(new JLabel(imageIcon));
喜欢
BufferedImage bufferedImage = ImageIO.read(MyClass.class.getResource("/images/cccc.jpg"));
参见:Loading image from a resource Can't read input file
说你的代码在 ecplise 中工作是暗示你已经在项目文件夹的根目录中找到了 "cccc.jpg" 文件(当你 运行 应用程序或eclipse 中的单元测试)。
将文件作为资源打包到您的 jar 中:只需将其放入您的源文件夹中。如果您的源包命名为 "my.app.main",您可以将图像文件直接放在 "my" 文件夹旁边并通过以下方式加载:
InputStream is = ClassLoader.getSystemResourceAsStream( "cccc.jpg" )
或将其放入子包中(例如"my.app.images")并通过以下方式加载:
InputStream is = ClassLoader.getSystemResourceAsStream( "my/app/images/cccc.jpg" )
顺便说一句:ImageIO.read 也可以将 InputStream 作为参数。
我解决了这个问题。现在,当我打开 jar 文件时,一切都已正确加载。
我在将带有后台资源的 Jframe 应用程序导出到 jar 文件时遇到问题(没有任何外部资源文件夹。我更喜欢将所有内容都放入 jar 文件中以获得更好的可移植性)。 这是代码。在 Eclipse 上一切正常,但是当我导出到 jar 文件时,应用程序不会加载,因为找不到资源 "cccc.jpg"。 我已经尝试过 getResource() 但效果不佳。
// Load Background image
BufferedImage img = null;
try {
img = ImageIO.read(new File("cccc.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
// Set Background image
Image dimg = img.getScaledInstance(640, 480, Image.SCALE_SMOOTH);
ImageIcon imageIcon = new ImageIcon(dimg);
setContentPane(new JLabel(imageIcon));
喜欢
BufferedImage bufferedImage = ImageIO.read(MyClass.class.getResource("/images/cccc.jpg"));
参见:Loading image from a resource Can't read input file
说你的代码在 ecplise 中工作是暗示你已经在项目文件夹的根目录中找到了 "cccc.jpg" 文件(当你 运行 应用程序或eclipse 中的单元测试)。
将文件作为资源打包到您的 jar 中:只需将其放入您的源文件夹中。如果您的源包命名为 "my.app.main",您可以将图像文件直接放在 "my" 文件夹旁边并通过以下方式加载:
InputStream is = ClassLoader.getSystemResourceAsStream( "cccc.jpg" )
或将其放入子包中(例如"my.app.images")并通过以下方式加载:
InputStream is = ClassLoader.getSystemResourceAsStream( "my/app/images/cccc.jpg" )
顺便说一句:ImageIO.read 也可以将 InputStream 作为参数。
我解决了这个问题。现在,当我打开 jar 文件时,一切都已正确加载。