如何解决运行Jar时的当前工作目录
| 我创建了一个应用程序,它是一个可运行的jar(使用maven-assembly插件),带有几个用户可配置的资源,它们位于同一目录(图像,属性等)的旁边。 在命令行中使用“ 0”运行jar时,当前目录与您期望的一样。问题是在某些操作系统(Ubuntu 11.04)上,如果通过双击jar来启动应用程序,则当前工作目录为主目录。 有没有一种首选的方法来获取jar所在的当前目录,或者是另一种方法来访问位于jar旁边的外部资源?解决方法
您可以使用
MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()
来获取jarfile的位置。
另一种替代方法是将jar文件中的其他只读资源与相关类一起打包,以便您可以使用Class.getResource(String)或Class.getResourceAsStream(String)来获取相对于给定类的资源。
例如,您可能具有com.example.icons.Icons类,并且图标将与com / example / myapp / icons /路径中的Icons.class一起打包。假设您的“打开”按钮使用一个名为open.png的图标:
ImageIcon icon = new ImageIcon(Icons.getResource(\"open.png\"));
, 在这里,我尝试从运行jar的目录中查找目录。
public class JarLocation {
public static void main(String[] args) {
new JarLocation().say();
}
public void say() {
String className = this.getClass().getName().replace(\'.\',\'/\');
String classJar =
this.getClass().getResource(\"/\" + className + \".class\").toString();
if (classJar.startsWith(\"jar:\")) {
System.out.println(\"*** running from jar!\");
}
javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
null,classJar,\"jar location\",javax.swing.JOptionPane.DEFAULT_OPTION);
}
}
首先,我用\“ / \”替换\“。\”来构建当前类的\“ path \”,然后将.class作为资源检索。 toString()方法返回如下内容:
jar:file:/C:/temp/testing.jar!/my/package/JarLocation.class
从那里解析给定的字符串以检索jar所在的目录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。