Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从GNOME运行时如何获取runnable.jar文件的位置_Java_Jar_Path_Gnome - Fatal编程技术网

Java 从GNOME运行时如何获取runnable.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文件时

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

最终,它将作为一个可运行的jar发布,并在同一文件夹中包含一些配置文件。要加载它们,我需要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