2010-04-22 15 views
10

Sto utilizzando Launch4J per avviare la mia applicazione Java e se sul sistema è presente un JRE x64, Launch4J sembra preferirlo.Configurare Launch4J per utilizzare solo JVM a 32 bit

Sfortunatamente la mia applicazione non può funzionare su una JVM a 64 bit perché sto caricando una DLL a 32 bit, che non è possibile e causa un UnsatisfiedLinkError.

C'è un modo per forzare/ingannare Launch4J per utilizzare solo una JVM a 32 bit?

+0

è quasi 2012, e sembra che ci sia stato un aggiornamento nel febbraio 2011 e la questione ancora non sembra essere stato fissato dopo aver letto il forum. – KJW

+0

Se si punta Launch4j per utilizzare la shell di cmd.exe di windows a 32 bit nella directory SYSWOW64, non sarebbe possibile eseguire una JVM a 64 bit da tale shell. Solo un pensiero ... – djangofan

risposta

5

Ho avuto questo problema esatto circa un anno fa, utilizzando Lauch4J per avvolgere un piccolo programma Java che ha richiesto a 32 bit DLL (SWT-Win32.dll, come è successo).

Ho scoperto che se fossero installate JVM a 32 e 64 bit, Launch4J avrebbe sempre preferito quello a 64 bit. Funzionerebbe solo se la JVM a 64 bit fosse stata disinstallata, il che ovviamente non era una soluzione pratica.

Non ho trovato alcun modo per far sì che Launch4J preferisca (e richieda) la JVM a 32 bit, dopo aver cercato un po 'e aver posto domande sul suo forum.

Pertanto, ho valutato un buon numero di convertitori JRE alternativi (ho utilizzato questo elenco: http://www.excelsior-usa.com/articles/java-to-exe.html).

Ho finito per stabilirmi su Jar2Exe, che era l'unico con le funzionalità di cui avevo bisogno. Non è gratuito, anche se c'è una versione di valutazione, e penso che non fosse costoso.

Spero che questo aiuti!

+0

Grazie per il suggerimento Jar2Exe, è perfetto per la mia azienda. – brimborium

1

Non so Launch4J, ma è possibile ottenere le informazioni su 32/64 leggendo System.getProperty("os.arch");. Se si incontra un sistema a 64 bit, è possibile uscire dall'installer con un messaggio piacevole per comunicare all'utente di installare una JVM a 32 bit.

È possibile eseguire il wrapping del codice startUp con un wrapper per visualizzare un messaggio-box per l'utente.

public static void main(String[] args]){ 

    String architecture = System.getProperty("os.arch"); 
    // Did not test the return value of this property,,but should work 
    if("64".equals(architecture)){ 
     // Show a dialog, or print a logmessage 
     System.exit(-1); 
    } 
    // Start my APP 
    com.something.startup.main(args); 
} 
+1

questo è un buon suggerimento ma http://stackoverflow.com/questions/807263/how-do-i-detect-which-kind-of-jre-is-installed-32bit-vs-64bit suggerisce che "" os.arch "' restituisce risultati incoerenti. – KJW

+0

Non penso che questo in realtà risolva la domanda originale, però. – mhucka

0

È necessario aggiungere un parametro JVM durante la configurazione.

E 'mostrato nel post qui sotto su come aggiungerlo:

http://www.technimi.com/index.php?do=/group/java/forum/building-an-exe-using-launch4j-for-32-bit-jvm/

+0

Per quanto ne so, questa opzione -D32 era supportata nelle versioni precedenti della JVM, ma non è documentata per Java SE6 e non sembra funzionare. Tuttavia, facci sapere se funziona per te! –

+0

"Mi dispiace, la pagina che stavi cercando in questo blog non esiste.". Si prega di evitare le risposte solo per il collegamento ... – Matthieu

1

Se non ti dispiace compresa una copia del JDK con la tua applicazione, provare a passare questi argomenti (in MyApp. ini) per Launch4J:

-D32 -Djava.home=d:\MyApp\JDK32 -Djava.ext.dirs=d:\MyApp\JDK32\jre\lib\ext 

ci sono anche altre cose che accadono qui che si potrebbe usare:

Se non si crea un pacchetto JRE, è possibile s e l'opzione Launch4j per usare "jreOnly" e quindi, usando la variabile di ambiente DOS chiamata "% ProgramFiles%", è possibile individuare il JRE a 32 bit o a 64 bit nella posizione prevista, a seconda che si sia utilizzato SysWOW64 32- shell bit cmd.exe o normale shell a 64 bit. Poi si può passare queste opzioni per la JVM:

-D32 -Djava.home=%ProgramFiles%\Java\JREDIR -Djava.ext.dirs=%ProgramFiles%\Java\JREDIR\lib\ext 

o

-D32 -Djava.home=%ProgramFiles(x86)%\Java\JREDIR -Djava.ext.dirs=%ProgramFiles(x86)%\Java\JREDIR\lib\ext 
10

Ho esattamente lo stesso problema: Into ambiente a 64 bit se entrambe le 32 ans 64 bit JDK/JRE vengono installati questi strumenti sempre rilevare la versione a 64 bit. Ho patchato il codice sorgente (java + C++) per creare la mia versione e ricompilare tutto. Aggiungo una casella di controllo per forzare il rilevamento JDK/JRE a 32 bit in ambiente Windows a 64 bit. Basta scaricare la versione e usarla come quella originale.

Versione: launch4j-3.0.2-win32_Java32bitsDetection

+0

Grazie amico, la migliore soluzione su questa pagina finora! – Edgar

+2

Ottimo lavoro ... Hai considerato di inviare la tua patch agli sviluppatori di launch4j? Hanno un problema aperto per questo: http://sourceforge.net/tracker/?func=detail&aid=2813453&group_id=95944&atid=613100 – jumar

0

Per tutti gli utenti di applicazioni Launch4J come Areca che vengono punto da questa, e hanno bisogno di un lavoro rapido giro, guardate nella directory in cui viene lanciato l'applicazione e troverete una riga di comando java completa per l'esecuzione il tuo programma all'interno di un file chiamato launch4j.log. Basta creare un file bat o uno script usando java vm che preferisci ed eseguirlo con la riga di comando completa nel log.

0

Questa è una vecchia domanda e Launch4J è stato aggiornato da quando è stato richiesto. Ora c'è un controllo dell'interfaccia utente dedicato per selezionare quale versione della JVM preferire. opzioni attualmente sono:

  • 64-bit solo
  • primo a 64 bit, quindi a 32 bit
  • First 32-bit, quindi a 64 bit
  • solo a 32 bit

L'ultimo, ovviamente, è esattamente ciò che l'OP ha richiesto.

Launch4J JVM Selection Dialog

Problemi correlati