Java6端口及应用程序

Java6端口及应用程序,java,macos,Java,Macos,我有一个用于Mac的Java桌面应用程序,我们正在将Java与该应用程序一起移植。问题是,我们使用的Java严格来说是Java6,而不是Java7(因为Java7没有-d32模式) 因此,我从苹果开发者那里下载了Java6JDK,并将其打包。这一切都很好。但当我尝试在其他Mac上运行时,它会抛出以下错误: /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin $ ./java -version dyld: Library no

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

因此,我从苹果开发者那里下载了Java6JDK,并将其打包。这一切都很好。但当我尝试在其他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
根据,它尝试在
/Library/Java/JavaVirtualMachines/
中搜索相应的目录,而不是在我移植的文件夹中。我如何解决这个问题

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


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

苹果授权是否允许他们的JRE通过第三方应用程序重新发布

我认为你让事情变得比实际情况更困难了。如果用户没有安装Java 6(可能在OS X 10.7和10.8中安装),Mac OS将在Java应用程序首次尝试运行时自动提示用户下载并安装Java 6。安装后,它将自动继续启动您的应用程序


只需确保您的应用程序适合于Java 6(例如,使用旧的Mac Jar Bundler应用程序或手动创建等效的Info.plist)而不是Java 7(例如,使用新的Oracle appbundler.Jar)。

为什么您的程序需要
-d32
模式?对于Java程序来说,它运行在32位还是64位操作系统上并不重要。如果在Java 7上运行程序时出现问题,我建议您解决这些问题,而不是强迫用户使用过时的Java版本。这是因为我需要对仅32位的
Canon
sdk进行本机调用。我们不能从64位VM@JesperOops进行32位调用。我忘了许可证。在我的例子中,只是为了能够访问一些32位本机库。我正在使用Java6。但它就像后台的守护进程。我的UI在JavaFX中,它与Java6进程通信。Java 6进程由
ProcessBuilder
启动。在这种情况下该怎么办?@Jatin它应该以同样的方式工作,即使您使用Java作为后台进程。事实上,在命令行中键入“java-version”就足以使它在尚未安装的情况下下载它。最后一个问题。是否键入
java-version
将使其下载最新版本而不是java 6?@Jatin否,它将只安装苹果最新的java(即6),而不是Oracle的。用户必须手动安装Oracle Java 7。但是,如果用户手动安装了Oracle Java 7,您可能会遇到问题,
Java
命令可能会运行7而不是6。也许最安全的做法是为Java程序创建一个应用程序包,即使它只是一个后台进程。然后,至少您可以确定它将使用Java6,或者在需要时下载它。