Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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
Windows、Mac和Linux(Unix)上的Java程序_Java_Windows_Linux_Macos_Jar - Fatal编程技术网

Windows、Mac和Linux(Unix)上的Java程序

Windows、Mac和Linux(Unix)上的Java程序,java,windows,linux,macos,jar,Java,Windows,Linux,Macos,Jar,我正在开发一个Java应用程序,它当然应该通过U盘在主要操作系统上运行。对于Mac用户,我将JAR(应用程序和更新程序)捆绑到Apple.App程序中。现在:让jar彼此启动并使用棒上的相对文件夹路径的最佳方式是什么。我这样问是因为我注意到在Mac上,它就像.app文件夹是启动的文件(而不是里面的jar),因此父目录是存储我所有文件的工作目录。在Windows和Linux上,它只是一些MyApp.app文件夹,文件将在其中。 通过代码进行案例和路径切换真的是解决这个问题的唯一方法吗? 谢谢您可以

我正在开发一个Java应用程序,它当然应该通过U盘在主要操作系统上运行。对于Mac用户,我将JAR(应用程序和更新程序)捆绑到Apple.App程序中。现在:让jar彼此启动并使用棒上的相对文件夹路径的最佳方式是什么。我这样问是因为我注意到在Mac上,它就像.app文件夹是启动的文件(而不是里面的jar),因此父目录是存储我所有文件的工作目录。在Windows和Linux上,它只是一些MyApp.app文件夹,文件将在其中。 通过代码进行案例和路径切换真的是解决这个问题的唯一方法吗?
谢谢

您可以向JVM询问给定类的物理位置。发件人:

这甚至适用于jar文件


当您知道位置后,可以从那里导航。

最好的选择是为每个操作系统创建启动器,并从这些启动器调用JVM来运行jar。对于Linux,创建一个shell脚本,在Mac上是.app(也可以是shell脚本),在Windows上是.bat或可执行文件。

我需要类的位置来完成这项工作,或者我有什么问题吗?还有一个问题是.app文件夹中所需的JAR不在lib文件夹中,因此当通过console/runtime启动时,会抛出NotFoundExceptions。捆绑应用程序2。进入.app并将jar移动到lib文件夹3中。从.app双击和运行时开始。getRuntime().exec()工作。。。但这并不漂亮:-/听起来你没有按预期的方式做。您应该使用官方的Apple jar bundler创建一个漂亮的bundle。此外,所描述的方法适用于在类路径上找到的类。听起来你在第一步设置类路径时遇到了问题。所以我需要在从代码或windows.bat启动jar时添加一些类路径选项?是的,这是我的想法。但这些JAR还需要“通信”,这取决于应用程序。通常,若这些JAR位于类路径中,您将能够从这些JAR的类中生成对象。
// Get the location of this class
Class cls = this.getClass();
ProtectionDomain pDomain = cls.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation();  // file:/c:/almanac14/examples/