如何在可运行的jar中访问我的应用程序资源?

时间:2011-08-22 02:00:17

标签: java resources jar double-click

我刚刚发布了这个问题:How to distribute my Java program so that it is runnable by double-clicking a single file?当我让可运行的jar工作时,很多东西都没有按照我想要的方式工作,因为我的程序找不到我想要的资源使用诸如图像和SQLite数据库文件。

在我的文件系统中,我在img文件夹中有几个.png图像,并且在项目的根文件夹中有一个名为test.db的数据库

虽然我的项目是在Eclipse中,但我使用类似的方式访问我的图像:

BufferedImage bufImg = ImageIO.read(new File("img/anImage.png"))

我使用以下方法连接到我的SQLite数据库:

Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:test.db");

现在,当我双击我新创建的runnable-jar时,无法找到资源。我想知道我应该如何访问它们,并且当它不在IDE中时让我的程序工作。

我还想知道如何看待异常是什么(如果可能的话)。因为现在,有些页面因为无法加载而保持灰色,因为(我猜测)有些资源无法找到,但我不知道它是否只是导致问题的数据库或者如果它也是图像。

非常感谢并且抱歉在如此短的时间内提出两个相关问题!

1 个答案:

答案 0 :(得分:5)

Jar中没有文件,只有资源,因此大多数使用文件的方法也会接受资源。

例如,ImageIO.read(...)有一个接受URL的重载和一个接受InputStream的重载。所以试试

BufferedImage bufImg = ImageIO.read(MyClass.class.
         getResourceAsStream("img/anImage.png"));

请务必使用相对于班级文件位置和实际班级名称的路径,或this.getClass()