我正在使用Swing开发一个小型Java应用程序,它应该在Windows / Linux和MacOS上运行。
最终它将作为一个可运行的jar发布,其中一些配置文件位于同一文件夹中。要加载它们,我需要在程序中存储jar文件夹的路径 已经有一些线程,如this one或this 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时做错了什么?任何帮助将不胜感激!
干杯 尼克
答案 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)