2013-04-04 43 views
0

我有用于Mac的Java桌面应用程序,我们正在将Java与应用程序一起移植。问题在于,我们使用的Java严格为Java6而不是Java7(因为Java7没有-d32模式)。端口Java6以及应用程序

因此,我从苹果开发者site下载了Java6 jdk,并将它捆绑在软件包中。这一切运作良好。但是当我尝试在其他Mac上的运行,那么它引发以下错误:

/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin 
$ ./java -version 
dyld: Library not loaded: @rpath/libjli.jnilib 
Referenced from: /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/./java 
Reason: image not found 
Trace/BPT trap: 5 

按照this,它会尝试在/Library/Java/JavaVirtualMachines/和我一起移植的文件夹不是在寻找各自的目录中。我该如何解决这个问题?

我该如何将Java6与应用程序一起移植。

其次,我使用的Java6是jdk,因为我找不到Java6的Jre。如果有人可以提供或共享Jre6,我们将不胜感激。

+0

为什么你的程序需要'-d32'模式?对于Java程序,它是否在32位或64位操作系统上运行并不重要。如果在Java 7上运行程序时出现问题,我会建议修复这些问题,而不是强迫用户使用过时的Java版本。 – Jesper 2013-04-04 07:51:26

+0

这是因为我需要对仅在32位的'Canon' sdk进行本地调用。我们无法从64位虚拟机进行32位调用@Jesper – Jatin 2013-04-04 08:08:31

回答

1

Apple授权是否允许他们的JRE通过第三方应用重新分配?

我认为你正在做的事情比他们需要的更难。如果用户没有安装Java 6(可能在OS X 10.7和10.8中),Mac OS将自动提示用户在Java应用程序第一次尝试运行时下载并安装它。它会在安装后自动继续启动您的应用程序。

只要确保您为Java 6适当地捆绑了您的应用程序(例如,使用旧的Mac Jar Bundler应用程序或手动创建等效的Info.plist)而不是Java 7(例如,使用新的Oracle appbundler.jar) 。

+0

哎呀,我忘记了许可证。就我而言,仅仅是为了能够访问一些32位本地库。我正在使用Java 6.但它在后台像是守护进程。我的UI在JavaFX中,它与Java 6进程通信。 Java 6进程由'ProcessBuilder'启动。在这种情况下做什么? – Jatin 2013-04-04 17:48:03

+0

@Jatin即使您将Java用作后台进程,它也应该以同样的方式工作。事实上,在命令行中键入“java -version”足以导致它在下载它的情况下,如果它尚未安装。 – whiskeyspider 2013-04-04 17:54:07

+0

谢谢:)。最后一个问题。不会输入'java -version'会使它下载最新版本而不是Java 6? – Jatin 2013-04-04 18:00:50

相关问题