从GNOME运行时如何获取runnable .jar文件的位置

时间:2012-12-16 13:04:00

标签: java jar path gnome

我正在使用Swing开发一个小型Java应用程序,它应该在Windows / Linux和MacOS上运行。

最终它将作为一个可运行的jar发布,其中一些配置文件位于同一文件夹中。要加载它们,我需要在程序中存储jar文件夹的路径 已经有一些线程,如this onethis one.

我的问题是,当我在eclipse中运行程序或从终端调用runnable jar时,所讨论的所有解决方案都运行正常:

java -jar /path/to/jar/jarfile.jar

然而,当我点击Cinnamon或Gnome中的jar文件时(这是大多数用户都知道要做的),我没有得到正确的路径。 (MacOS用户报告相同的问题)

这是我到目前为止所尝试的以及通过双击运行时的输出(所有这些都显示从eclipse或终端运行时所需的路径):

ClassLoader.getSystemClassLoader().getResource(".").getPath()
Output: file:/usr/lib/jvm/java-6-openjdk-common/jre/lib/ext/pulse-java.jar!/

SomeClass.class.getProtectionDomain().getCodeSource().getLocation().getPath();
Output: ./

System.getProperty("user.dir");
Output: /home/myusername

有没有其他方法可以做到这一点,或者我在导出jar时做错了什么?任何帮助将不胜感激!

干杯 尼克

3 个答案:

答案 0 :(得分:1)

简化,并使用启动脚本(.bat / .sh文件)来运行您的应用程序。此启动脚本将获取文件系统中其自己位置的路径,并将其作为参数或系统属性传递给Java应用程序。这具有能够传递其他参数的额外优点,例如堆的大小等。

在Windows上,%~dp0是包含已执行bat文件的目录的路径。在Unix上,您可以使用$(dirname $0)

答案 1 :(得分:0)

您可以将所有配置文件存储为jar中的资源,并将它们复制到 home.dir +“。AppName /”。

中的文件

如果没有结构化配置数据,那么首选项API Preferences.systemNodeForPackage似乎是最明智的选择。导入有inputStream方法;您的初始配置模板可能是jar中的资源。

答案 2 :(得分:0)

使用System.getProperty(“java.class.path”)获取类路径并扫描它以获取“.jar”名称。请注意,路径分隔符取决于操作系统(File.pathSeparator)