我正在研究一个Java应用程序,当然应该从USB棒上运行在主要的操作系统上。 对于Mac用户,我将jar(App和更新程序)捆绑到Apple .app程序中。 现在:什么是最好的方式让jar子相互启动,并使用棒上的相对文件夹path。 我问,因为我注意到,在Mac上它就像.app文件夹是启动的文件(而不是内部的jar),因此父目录是我的所有文件将被存储的工作目录。 在Windows和Linux上,它只是一些MyApp.app文件夹,文件将在里面。 代码的情况和path切换真的是解决这个问题的唯一方法吗? 谢谢
您可以向JVM询问给定类的物理位置。 来自http://www.exampledepot.com/egs/java.lang/ClassOrigin.html :
// 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/
即使对于jar文件也是如此。
当你知道位置时,你可以从那里导航。
最好的选择是为每个操作系统创建启动器,从这些启动器调用JVM运行jar。 对于Linux制作一个shell脚本,在Mac上它将是.app(或shell脚本),在Windows上.bat或可执行文件将工作。