2011-06-04 89 views
1

我正在研究一个Java应用程序,当然这个应用程序可以在USB操作系统上运行。对于Mac用户,我将jar(App和更新程序)捆绑到Apple .app程序中。现在:让罐子互相启动并使用棒子上的相关文件夹路径的最佳方式是什么?我问,因为我注意到,在Mac上它就像.app文件夹是启动的文件(而不是内部的jar),因此父目录是所有文件将被存储的工作目录。在Windows和Linux上,它只是一些MyApp.app文件夹,文件将在里面。 通过代码切换情况和路径真的是解决这个问题的唯一方法吗? 谢谢Windows,Mac和Linux上的Java程序(Unix)

回答

2

您可以向JVM询问给定类的物理位置。 From 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文件,这也可以工作。

当你知道位置时,你可以从那里导航。

+0

我需要类的位置来做到这一点,或者我得到了什么错?还有一个问题是,.app文件夹内所需的jar文件不在lib文件夹中,因此在启动时由控制台/运行时引发ClassNotFoundExceptions。 – Magreet 2011-06-04 13:59:22

+0

我得到了一个解决方法1.绑定.app 2.进入.app并将jar移动到lib文件夹中3.从.app doubleclick和Runtime.getRuntime()。exec()开始工作...但这并不漂亮: -/ – Magreet 2011-06-04 14:05:29

+0

这听起来像你没有按照预期的方式去做。你应该使用官方的Apple jar捆绑器来创建一个不错的捆绑包。 – 2011-06-04 14:25:43

1

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

+0

是的,这是我的意图,但这些罐子也需要“沟通” – Magreet 2011-06-04 14:01:38

+0

这取决于应用程序。通常情况下,如果它们在classpath中,就可以从这些jar中的类中创建对象。 – Xolve 2011-06-04 14:34:35

相关问题