Java 从GNOME运行时如何获取runnable.jar文件的位置
我正在使用Swing开发一个小型Java应用程序,它应该运行在Windows/Linux和MacOS上 最终,它将作为一个可运行的jar发布,并在同一文件夹中包含一些配置文件。要加载它们,我需要jar存储在程序中的文件夹的路径。Java 从GNOME运行时如何获取runnable.jar文件的位置,java,jar,path,gnome,Java,Jar,Path,Gnome,我正在使用Swing开发一个小型Java应用程序,它应该运行在Windows/Linux和MacOS上 最终,它将作为一个可运行的jar发布,并在同一文件夹中包含一些配置文件。要加载它们,我需要jar存储在程序中的文件夹的路径。 已经有两个类似或的线程 我的问题是,当我从eclipse中运行程序或从这样的终端调用runnable jar时,这里讨论的所有解决方案都可以正常工作: java -jar /path/to/jar/jarfile.jar 然而,当我在肉桂或Gnome中单击jar文件时
已经有两个类似或的线程 我的问题是,当我从eclipse中运行程序或从这样的终端调用runnable jar时,这里讨论的所有解决方案都可以正常工作:
java -jar /path/to/jar/jarfile.jar
然而,当我在肉桂或Gnome中单击jar文件时(这是大多数用户都知道要做的),我没有得到正确的路径。(MacOS用户报告了相同的问题)
以下是我到目前为止尝试过的内容,以及通过双击运行时的输出(当从eclipse或终端运行时,所有这些都会显示所需的路径):
还有其他方法吗?或者在导出jar时我做错了什么?任何帮助都将不胜感激
干杯
Nick简化程序,并使用启动脚本(.bat/.sh文件)运行应用程序。这个启动脚本将获得它自己在文件系统中的位置的路径,并将其作为参数或系统属性传递给Java应用程序。这还有一个额外的优点,就是能够传递其他参数,比如堆的大小等
在windows上,
%~dp0
是包含已执行bat文件的目录的路径。在Unix上,您可以使用$(dirname$0)
您可以将所有配置文件作为资源存储在jar中,并将它们复制到home.dir+.AppName/”中的文件中
尽管痛苦,首选项API似乎是最明智的选择,如果结构化配置数据很少的话。有一个用于导入的
inputStream
方法;您的初始配置模板可以是jar中的一个资源。只需使用System.getProperty(“java.class.path”)获取类路径,然后扫描它以查找您的“.jar”名称。请注意,路径分隔符依赖于操作系统(File.pathselector)谢谢您的回答!这就是我现在正在做的。但不知何故,这感觉像是一个肮脏的变通方法。这是每个人都使用的方法。另一种选择是生成一个包装器可执行文件,但其思想是相同的。
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