繁体   English   中英

更正 Info.plist 设置以在特定 JVM 中启动 Java 应用程序

Correct Info.plist settings to launch Java app in specific JVM

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

[JavaAppLauncher] 请求 [1.8+],改为在 [(null)] 中启动。

[JavaAppLauncher 错误] 无法找到要启动的 Java 版本

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

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

dyld:未找到符号:_CTFontCopyDefaultCascadeListForLanguages 引用自:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/libawt_lwawt.dylib 预期在:/System/Library/Framework/ApplicationServices. /A/应用服务

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

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

java版本“1.8.0_181”

Java(TM) SE 运行时环境(构建 1.8.0_181-b13)

Java HotSpot(TM) 64 位服务器 VM(构建 25.181-b13,混合模式)

并安装了以下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

所以我想问题在于操作系统如何启动应用程序。 我究竟做错了什么?

1 个回复

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

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

这个网站描述了如何修改 info.plist 文件,甚至有一个脚本可以为你做这件事。

简而言之,必须进行的更改如下。 文件/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> ...
1 iOS版本特定的info.plist设置

我正在更新iOS7的应用程序(同时仍支持iOS6),并使用UIStatusBarStyle: UIStatusBarStyleLightContent更新状态栏以使用白色前景UIStatusBarStyle: UIStatusBarStyleLightContent 。 但是UIStatu ...

4 NEHotspotHelper的info.plist设置

根据Santosh的问题 ,我需要在info.plist中添加一些新项。 但是,我不知道如何使用以下指南。 应用程序的Info.plist必须包含一个包含“网络身份验证”的UIBackgroundModes数组*。 该应用程序必须将“ c​​om.apple.develope ...

6 info.plist中的IconFiles

如果我想在我的应用程序中使用多个图标,应该将它们全部输入到info.plist中的IconFiles中吗?如果是,我应该从info.plist中删除iconFile吗? ...

7 如何在info.plist上设置应用程序图标?

我有三种方案,每种方案都有一个xcconfig文件。 我想设置一个变量来为每个环境设置AppIcon 。 例如,在我的hom.xcconfig中设置: 在我设置的其他xcconfig文件中: 在info.plist中,我在关键的Icon文件中设置了变量$ {ICON},但它不 ...

2017-09-11 20:04:17 0 1147   ios/ xcode
8 我最近发布的应用程序更新在info.plist文件中没有最新/正确的值

我的info.plist文件中有一部分,其中存储了一个关键指标,应用程序使用该指标来了解它预期可以加载多少个数据库。 这是一个简单的数字,我可以根据需要进行更改。 出于某种原因,当应用程序从App Store用新值更新时,好像没有更新的plist值。 该应用程序正在基于旧值运行。 但 ...

9 为基于GPS位置的应用设置info.plist属性

我正在做一个基于GPS位置的应用程序。 这是一种GPS警报应用程序。 为此,我应该在info.plist文件的“必需的设备功能”下包括哪些属性? 我们应该同时包括“ gps”和“ location-services”吗? 我有一台iPad ...如果包含“ gps”,则表明我的应用未安装 ...

10 通过用户定义的设置在Info.plist中设置布尔属性

通过用户定义的设置在Info.plist文件中设置属性很简单,只需使用$ {YOUR_SETTING_NAME}作为值即可。 但是,是否有可能针对布尔型属性执行此操作? plist文件中的布尔值结构为: 目前尚不清楚如何使用用户定义的设置。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM