我刚刚发布了这个问题: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中时让我的程序工作。
我还想知道如何看待异常是什么(如果可能的话)。因为现在,有些页面因为无法加载而保持灰色,因为(我猜测)有些资源无法找到,但我不知道它是否只是导致问题的数据库或者如果它也是图像。
非常感谢并且抱歉在如此短的时间内提出两个相关问题!
答案 0 :(得分:5)
Jar中没有文件,只有资源,因此大多数使用文件的方法也会接受资源。
例如,ImageIO.read(...)有一个接受URL的重载和一个接受InputStream的重载。所以试试
BufferedImage bufImg = ImageIO.read(MyClass.class.
getResourceAsStream("img/anImage.png"));
请务必使用相对于班级文件位置和实际班级名称的路径,或this.getClass()