2013-02-28 18 views
8

Utilizzo jarbundler 2.2.0 come suggerito da altre risposte poiché l'applicazione deve essere eseguita su JRE 1.6 di Apple.Java Application Bundled per Mac non viene avviato

Il pacchetto sembra essere giusto, mostra con l'icona appropriata ma facendo clic su di esso non fa nulla. Se vado nel suo contenuto e prova doppio clic sul vaso con il file principale specificato funziona bene.

C'è un modo per vedere cosa sta succedendo? Qualche tipo di errore o registro che posso vedere?

Modifica Richiesto Info.plist. Dal momento che il codice è privato ho sostituito alcune cose con 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> 

Contenuto del PkgInfo:

APPL???? 

Sulle Application.app/Contents/MacOS ho la JavaApplicationStub dal Mac macchina.

risultante struttura del file:

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

uscite pregati di comandi:

~ $ 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) 
~ $ 
+0

Non conosco il modo migliore per creare un pacchetto per Java, ma una rapida occhiata a FreeMind (freemind.sourceforge.net) mostra che hanno una directory Java con il jar in Risorse e un collegamento JavaApplicationStub nel suo contenuto. – koan

+0

Anche io ce l'ho. – javydreamercsw

+0

Qual è il valore di 'CFBundleExecutable' nel Info.plist del bundle? Dovrebbe essere il nome del file binario nella cartella MacOS. – joerick

risposta

3

Quelle barre inverse sono certamente sbagliato, come Mac OS è Unix. Dovrebbe essere:

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

Dal momento che hai detto che hai fatto questo su Windows, un'altra cosa che vorrei controllare è i permessi dei file. Questi file in particolare:

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

Infine, la JVMVersion di 1,6 * è not recommended. Prova invece a utilizzare 1.5+ o 1.6+, poiché potrebbe essere più compatibile.

Escludendo quanto sopra, il problema deve essere dovuto a JavaApplicationStub. Nota, dalle pagine JarBundler:

Quando l'attività JarBundler ANT viene utilizzata su Windows o Linux, una copia di JavaApplicationStub deve essere fornita dallo sviluppatore. Questo non può essere creato dal sorgente ma deve essere ottenuto da un sistema Mac OS X.

un problema noto con Java lanciando stub

All'inizio del 2006 un Apple l'aggiornamento a QuickTime (7.0.4) ha causato più anziani versioni di "JavaApplicationStub" a non riuscire a avviarsi. Queste vecchie copie provenivano da sviluppatori che per primi hanno creato il pacchetto di applicazioni come directory e quindi hanno creato nuove applicazioni sostituendo i file JAR all'interno del pacchetto e non sostituendo "JavaApplicationStub" con una copia più aggiornata di .

+0

Hmmmm. Tutto ciò che è stato fatto dal jarbundler. Forse perché l'ho eseguito su Windows ... lo darò un'occhiata. – javydreamercsw

+0

@javydreamercsw Si prega di consultare la mia risposta rivista. – whiskeyspider

+0

Quando vengono eseguiti su SO basati su Linux, le barre vengono eseguite correttamente. Ottengo lo stesso risultato con i permessi del file che hai citato. L'app non si avvia ma esegue direttamente il jar. – javydreamercsw

1

Hai provato lanciare la vostra applicazione tramite il terminale utilizzando open?

open Application.app 

Questo dovrebbe fornire maggiori informazioni sul motivo per cui l'applicazione non riesce ad eseguire il vaso.

Aggiornamento: momento che attraversa open rendimenti:

LSOpenURLsWithRole() non riuscito con errore -10.810 per il file /Users/MacBookPro/NetBeansProjects/SynamicD/dist/SynamicD.app

Fare riferimento a https://developer.apple.com/library/mac/documentation/Carbon/Reference/LaunchServicesReference/LaunchServicesReference.pdf (pagina 69) indica che la descrizione dell'errore è:

kLSUnnnnnErr -10810 Uno sconosciuto rror si è verificato. Disponibile in OS X v10.0 e versioni successive.

+0

Farò un tentativo. Grazie! – javydreamercsw

+0

Questo è ciò che ottengo quando provo: LSOpenURLsWithRole() non è riuscito con errore -10810 per il file /Users/MacBookPro/NetBeansProjects/SynamicD/dist/SynamicD.app. – javydreamercsw

+0

Sembra che sia "kLSUnknownErr -10810 Si è verificato un errore sconosciuto Disponibile in OS X v10.0 e versioni successive." tramite la pagina 69 di https://developer.apple.com/library/mac/documentation/Carbon/Reference/LaunchServicesReference/LaunchServicesReference.pdf. Non c'è molto aiuto lì. Puoi aprire Console.app e cercare il nome dell'app? Ci dovrebbero essere più informazioni lì. – Zack

Problemi correlati