Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为Mac捆绑的Java应用程序不';开始_Java_Macos_Bundle - Fatal编程技术网

为Mac捆绑的Java应用程序不';开始

为Mac捆绑的Java应用程序不';开始,java,macos,bundle,Java,Macos,Bundle,正如其他答案所建议的那样,我正在使用jarbundler 2.2.0,因为应用程序应该在苹果的JRE 1.6上运行 捆绑包似乎是正确的,显示了相应的图标,但单击它什么也做不了。如果我进入它的内容并尝试用指定的主文件双击jar,效果会很好 有办法知道发生了什么吗?我能看到什么错误或日志 编辑 请求Info.plist。由于代码是私有的,我用应用程序替换了一些东西: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <pl

正如其他答案所建议的那样,我正在使用jarbundler 2.2.0,因为应用程序应该在苹果的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>
在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)
~ $ 

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

open Application.app
这将为您提供更多关于应用程序无法执行jar的原因的信息

更新: 运行
open
时产生:

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

参考(第69页)显示错误描述为:

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


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

  <array>
    <string>$JAVAROOT/Application.jar</string>
    <string>$JAVAROOT/lib/lib1.jar</string>
    <string>$JAVAROOT/lib/lib2.jar</string>
  </array>
。尝试使用1.5+或1.6+,因为它可能更兼容

排除以上所有因素,问题必须出在JavaApplicationStub上。注意,从JarBundler页面:

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

Java启动存根的已知问题

2006年初,苹果对Quicktime(7.0.4)的升级导致了更老的问题 “JavaApplicationStub”的版本无法启动。这些老 副本来自最先创建应用程序包的开发人员 作为目录,然后通过替换JAR创建新的应用程序 文件,而不是将“JavaApplicationStub”替换为 更多当前副本


我不知道为Java制作捆绑包的最佳方法,但快速查看FreeMind(FreeMind.sourceforge.net)表明,他们在资源中有一个带有jar的Java目录,在内容中有一个JavaApplicationStub链接。我也是这样做的。捆绑包的Info.plist中
CbundleExecutable
的值是多少?它应该是MacOS文件夹中二进制文件的名称。实际上,在此处发布Info.plist文件可能是一个好主意,这样我们可以查看一下。在不泄露私人信息的情况下添加了所有详细信息。我会尝试一下。谢谢这是我尝试时得到的结果:LSOpenURLsWithRole()失败,文件/Users/MacBookPro/NetBeansProjects/SynamicD/dist/SynamicD.app出现错误-10810。看起来是“klsunnownerr-10810发生未知错误。可在OS X v10.0及更高版本中获得。”通过第69页,共页。没有多少帮助。你能打开Console.app并查找你的应用名称吗?那里应该有更多的信息。很抱歉回答中的延迟,但是我没有自己的Mac,需要依赖其他人来开发/测试。在console中找不到任何内容。Hmmmm。所有这些都是由jarbundler完成的。也许是因为我在Windows上执行。。。我来看看。@javydreamercsw请看我修改过的答案。在基于Linux的操作系统上运行时,斜杠是正确的。我得到了与您提到的文件权限相同的结果。应用程序不会启动,但直接运行jar会启动。@javydreamercsw我已经重新创建了你的文件结构和Info.plist,一切正常。除了反斜杠,你的帖子没有什么问题。我仍然猜测问题在于文件权限或所有权。@javydreamercsw注意JavaApplicationStub是一个Mac OS二进制文件。在Windows或Linux上构建时,该二进制文件是如何形成的?您能输出JavaApplicationStub的'ls-l'吗?
  <array>
    <string>$JAVAROOT/Application.jar</string>
    <string>$JAVAROOT/lib/lib1.jar</string>
    <string>$JAVAROOT/lib/lib2.jar</string>
  </array>