我创建了一个应用程序,它是一个可运行的jar(使用maven-assembly插件),带有几个用户可配置的资源,它们位于同一目录中(图像,属性等)
从命令行运行jar时java -jar ...,当前目录正如您所期望的那样.问题是在某些操作系统(Ubuntu 11.04)上,如果只需双击jar启动应用程序,那么当前工作目录就是主目录.
是否有一种获取jar所在的当前目录的首选方法,或者是另一种方法来访问jar旁边的外部资源?
rob*_*rob 11
您可以使用MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()获取jarfile的位置.
另一种方法是将jar文件中的其他只读资源与相关类一起打包,这样就可以使用Class.getResource(String)或Class.getResourceAsStream(String)来获取相对于给定类的资源.
例如,你可能有一类com.example.icons.Icons,这些图标将被打包一起Icons.class在COM /例子/ MYAPP /图标/路径.假设您的"打开"按钮使用名为open.png的图标:
ImageIcon icon = new ImageIcon(Icons.getResource("open.png"));
Run Code Online (Sandbox Code Playgroud)