gpt4 book ai didi

java - 正确的 Info.plist 设置以在特定 JVM 中启动 Java 应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:07 25 4
gpt4 key购买 nike

我在将 Macos 应用程序从 Java 6 迁移到 Java 8 时遇到严重问题。由于它部署在 Mac 上,因此该程序使用的是 com.apple.eawt.ApplicationAdapter,该适配器已被弃用并被 com.apple.eawt.XYHandler 取代。

到目前为止一切顺利,我可以从 Eclipse 中启动我的应用程序(编译器合规级别设置为 1.8,JRE 设置为 Java SE 8)。

然后我有一个脚本调用 javac,将编译后的 jar 放入 .app 包中,编写 Info.plist 等等。 Java JVMVersion 设置为 1.8+ 。到目前为止,这也是有效的。

当我尝试启动应用程序时,它告诉我没有合适的 Java 1.8+ 版本可用

[JavaAppLauncher] Requested [1.8+], launching in [(null)] instead.

[JavaAppLauncher Error] unable to find a version of Java to launch

我尝试了 JVMVersion 的所有可能选项(1.8*、1.8.0_181、1.7+、1.6+),最后一个是唯一启动的选项。当然后来它崩溃了,因为Java6没有实现XYHandler而是ApplicationAdapter

如果我从命令行启动主类,它会启动,但随后会崩溃,因为:

dyld: Symbol not found: _CTFontCopyDefaultCascadeListForLanguages Referenced from: /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/libawt_lwawt.dylib Expected in: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices

这很奇怪,因为我对该主题的研究表明 _CTFontCopyDefaultCascadeListForLanguages 应该在 Java8 中可用。

顺便说一句,java -version的结果是

java version "1.8.0_181"

Java(TM) SE Runtime Environment (build 1.8.0_181-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

已安装以下jdks

1.8.0_181, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home

1.8.0_60, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home

1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home

1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

所以我猜问题出在操作系统启动应用程序的方式上。我做错了什么?

最佳答案

找到问题的解决方案。自从从 Apple 的 java 6 迁移到 Oracle 的 java 8 JDK 以来,一些设置丢失了,并且系统不知道 JVM 是否能够运行捆绑的应用程序。

需要修改 jvm 本身的 info.plist,以便告诉操作系统 Java 8 JVM 适合运行该应用程序。

This website describes how to modify the info.plist file甚至还有一个脚本可以为您完成此操作。

简而言之,必须进行的更改如下。文件 /Library/Java/JavaVirtualMachines/jdk_version_info_goes_here.jdk/Contents/Info.plist 必须从此更改

<key>JavaVM</key>
<dict>
<key>JVMCapabilities</key>
<array>
<string>CommandLine</string>
</array> ...

到此

<key>JavaVM</key>
<dict>
<key>JVMCapabilities</key>
<array>
<string>BundledApp</string>
<string>CommandLine</string>
<string>JNI</string>
</array> ...

关于java - 正确的 Info.plist 设置以在特定 JVM 中启动 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52782711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com