8

我正在使用其他答案所建议的 jarbundler 2.2.0,因为该应用程序应该在 Apple 的 JRE 1.6 上运行。

捆绑包似乎是正确的,显示有适当的图标,但单击它没有任何作用。如果我进入它的内容并尝试双击带有指定主文件的 jar 工作正常。

有没有办法看看发生了什么?我可以看到某种错误或日志?

编辑 请求的 Info.plist。由于代码是私有的,我用应用程序替换了一些东西:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plist version="1.0">
  <dict>
    <key>CFBundleName</key>
    <string>Application</string>
    <key>CFBundleShortVersionString</key>
    <string>2.2.0</string>
    <key>CFBundleGetInfoString</key>
    <string>Application version</string>
    <key>CFBundleAllowMixedLocalizations</key>
    <string>false</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleExecutable</key>
    <string>JavaApplicationStub</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>beta</string>
    <key>CFBundleIconFile</key>
    <string>SynamicD.icns</string>
    <key>CFBundleIdentifier</key>
    <string>net.sourceforge.javydreamercsw</string>
    <key>Java</key>
    <dict>
      <key>MainClass</key>
      <string>net.sourceforge.javydreamercsw.Main</string>
      <key>JVMVersion</key>
      <string>1.6.*</string>
      <key>ClassPath</key>
      <array>
        <string>$JAVAROOT/Application.jar</string>
        <string>$JAVAROOT/lib\lib1.jar</string>
        <string>$JAVAROOT/lib\lib2.jar</string>
      </array>
      <key>Properties</key>
      <dict>
        <key>apple.awt.textantialiasing</key>
        <string>true</string>
        <key>apple.awt.brushMetal</key>
        <string>true</string>
        <key>apple.laf.useScreenMenuBar</key>
        <string>true</string>
        <key>apple.awt.showGrowBox</key>
        <string>true</string>
      </dict>
    </dict>
  </dict>
</plist>

PkgInfo 的内容:

APPL????

在 Application.app/Contents/MacOS 我有来自 Mac 机器的 JavaApplicationStub。

结果文件结构:

Application.app
|
---Contents
      |
      ---Info.plist
      ---PkgInfo
      ---MacOS
            |
      |      ---JavaApplicationStub
      ---Resources
            |
             ---Java
                  |
                   ----lib
                        |
                         ---lib1.jar
                        |
                         ---lib2.jar
                  |
                   ---Application.jar
            |
             ---Application.icns

请求的命令输出:

~ $ java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
~ $ sw_vers -productVersion
10.8.2
~ $ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
    1.7.0_17, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home
    1.7.0_15, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home
    1.6.0_43-b01-447, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_43-b01-447, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home
~ $ /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home
~ $ echo $JAVA_HOME

~ $ echo $JAVA_ARCH

~ $ /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
java version "1.7.0_17"
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
~ $ ls /Library/Java/JavaVirtualMachines
jdk1.7.0_15.jdk jdk1.7.0_17.jdk
~ $ /System/Library/Frameworks/JavaVM.framework/Commands/java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01-447-11M4203)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01-447, mixed mode)
~ $ 
4

2 回答 2

3

那些反斜杠肯定是错误的,因为 Mac OS 是 Unix。应该:

  <array>
    <string>$JAVAROOT/Application.jar</string>
    <string>$JAVAROOT/lib/lib1.jar</string>
    <string>$JAVAROOT/lib/lib2.jar</string>
  </array>

既然您说您是在 Windows 上执行此操作的,那么我要检查的另一件事是文件权限。这些文件尤其是:

  • MacOS/JavaApplicationStub (rwxrwxr-x)
  • 资源/Java/Application.jar (-rw-rw-r--)
  • 资源/Java/lib/lib1.jar (-rw-rw-r--)
  • 资源/Java/lib/lib2.jar (-rw-rw-r--)

最后,不推荐JVMVersion 1.6* 。尝试改用 1.5+ 或 1.6+,因为它可能更兼容。

排除上述所有情况,问题一定出在 JavaApplicationStub 上。注意,来自 JarBundler 页面:

在 Windows 或 Linux 下使用 JarBundler ANT 任务时,开发人员必须提供 JavaApplicationStub 的副本。这不能从源代码构建,但必须从 Mac OS X 系统获得。

Java 启动存根的一个已知问题

2006 年初,Apple 升级到 Quicktime (7.0.4) 导致旧版本的“JavaApplicationStub”无法启动。这些旧副本来自开发人员,他们首先将应用程序包创建为一个目录,然后通过替换包中的 JAR 文件而不是用更新的副本替换“JavaApplicationStub”来创建新应用程序。

于 2013-03-08T19:38:45.560 回答
1

您是否尝试过使用终端通过终端启动您的应用程序open

open Application.app

这应该为您提供有关应用程序无法执行 jar 的原因的更多信息。

更新:通过open收益率运行:

文件 /Users/MacBookPro/NetBeansProjects/SynamicD/dist/SynamicD.app 的 LSOpenURLsWithRole() 失败并出现错误 -10810

参考https://developer.apple.com/library/mac/documentation/Carbon/Reference/LaunchServicesReference/LaunchServicesReference.pdf(第69页)显示错误描述为:

kLSUnknownErr -10810 发生未知错误。在 OS X v10.0 及更高版本中可用。

于 2013-03-04T19:13:53.540 回答