簡體   English   中英

Mac捆綁的Java應用程序無法啟動

[英]Java Application Bundled for Mac doesn't start

我正在按照其他答案的建議使用jarbundler 2.2.0,因為該應用程序應在Apple的JRE 1.6上運行。

該捆綁包似乎是正確的,帶有適當的圖標顯示,但是單擊它無濟於事。 如果我進入它的內容,然后嘗試雙擊具有指定主文件的jar,就可以正常工作。

有沒有辦法看到正在發生的事情? 我可以看到某種錯誤或日志?

編輯請求的Info.plist。 由於代碼是私有的,因此我用Application替換了一些東西:

<?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)
~ $ 

這些反斜杠肯定是錯誤的,因為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--)

最后, 不建議使用 1.6 *的JVMVersion。 請嘗試使用1.5+或1.6+,因為它們可能更兼容。

排除所有上述情況,問題必須出在JavaApplicationStub上。 注意,從JarBundler頁面:

在Windows或Linux下使用JarBundler ANT任務時,開發人員必須提供JavaApplicationStub的副本。 這不能從源代碼構建,而必須從Mac OS X系統獲得。

Java啟動存根的已知問題

在2006年初,Apple升級到Quicktime(7.0.4)導致較舊版本的“ JavaApplicationStub”無法啟動。 這些舊副本來自開發人員,他們首先將應用程序捆綁包創建為目錄,然后通過替換捆綁包中的JAR文件而不是使用最新副本替換“ JavaApplicationStub”來創建新應用程序。

您是否嘗試過使用open通過終端啟動應用程序?

open Application.app

這應該為您提供更多有關為什么應用程序無法執行jar的信息。

更新: open收益后:

LSOpenURLsWithRole()失敗,文件/Users/MacBookPro/NetBeansProjects/SynamicD/dist/SynamicD.app出現錯誤-1010

參考https://developer.apple.com/library/mac/documentation/Carbon/Reference/LaunchServicesReference/LaunchServicesReference.pdf (第69頁),該錯誤說明為:

kLSUnknownErr -10810發生未知錯誤。 在OS X v10.0和更高版本中可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM