2010-04-22 5 views
10

J'utilise Launch4J pour démarrer mon application Java et si un JRE x64 est présent sur le système, Launch4J semble le préférer.Configurer Launch4J pour utiliser uniquement la JVM 32 bits

Malheureusement, mon application ne peut pas fonctionner sur une machine JVM 64 bits car je charge une DLL 32 bits, ce qui n'est pas possible et conduit à une UnsatisfiedLinkError.

Est-il possible de forcer Launch4j/trick à utiliser une seule machine virtuelle Java 32 bits?

+0

il est presque 2012, et il semble y avoir eu une mise à jour en Février 2011 et cette question ne semble pas encore avoir été fixé après avoir lu le message board. – KJW

+0

Si vous pointez Launch4j pour utiliser le shell Windows cmd.exe 32 bits dans le répertoire SYSWOW64, il ne sera pas possible d'exécuter une JVM 64 bits à partir de ce shell. Juste une pensée ... – djangofan

Répondre

5

J'ai eu exactement ce problème il y a environ un an, en utilisant Lauch4J pour envelopper un petit programme Java qui requiert une DLL 32 bits (SWT-Win32.dll, comme il est arrivé).

J'ai trouvé que s'il y avait des JVM 32 bits et 64 bits installés, Launch4J privilégierait toujours celui de 64 bits. Cela ne fonctionnerait que si la JVM 64 bits était désinstallée, ce qui n'était évidemment pas une solution pratique.

Je n'ai trouvé aucun moyen de faire en sorte que Launch4J préfère (et exige) la JVM 32 bits, après avoir fait beaucoup de recherches et posté des questions sur son forum.

Par conséquent, j'ai évalué un bon nombre de convertisseurs JRE alternatives (j'ai utilisé cette liste: http://www.excelsior-usa.com/articles/java-to-exe.html).

Je fini par installer sur Jar2Exe, qui était le seul qui avait les caractéristiques que je avais besoin. Ce n'est pas gratuit, bien qu'il existe une version d'évaluation, et je pense que ce n'était pas cher.

Espérons que cela aide!

+0

Merci pour l'indice Jar2Exe, qui est parfait pour mon entreprise. – brimborium

1

Je ne connais pas Launch4J, mais vous pouvez obtenir l'information sur 32/64 en lisant System.getProperty("os.arch");. Si vous rencontrez un système 64 bits, vous pouvez quitter le programme d'installation avec un bon message, pour indiquer à l'utilisateur d'installer une machine virtuelle Java 32 bits.

Vous pouvez envelopper votre code de démarrage avec un Wrapper pour afficher une boîte de message à l'utilisateur.

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

c'est une bonne suggestion mais http://stackoverflow.com/questions/807263/how-do-i-detect-which-kind-of-jre-is-installed-32bit-vs-64bit suggère que '" os.arch "' renvoie des résultats incohérents. – KJW

+0

Je ne pense pas que cela répond vraiment à la question initiale, cependant. – mhucka

0

Vous devez ajouter un paramètre JVM lors de la configuration.

Il est indiqué dans le message ci-dessous sur la façon d'ajouter:

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

+0

Pour autant que je sache, cette option -D32 était supportée dans les versions antérieures de la JVM, mais elle n'est pas documentée pour Java SE6 et ne semble pas fonctionner. Cependant, laissez-nous savoir si cela fonctionne pour vous! –

+0

"Désolé, la page que vous recherchez dans ce blog n'existe pas.". S'il vous plaît éviter les réponses de lien seulement ... – Matthieu

1

Si vous ne me dérange pas, y compris une copie de votre application avec JDK, essayez passer ces arguments (dans le MyApp. ini) à launch4j:

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

Il y a aussi d'autres choses qui se passent ici que vous pouvez utiliser:

Si vous n'emballez pas le JRE, vous pouvez s et l'option Launch4j à utiliser « jreOnly » puis, en utilisant la variable d'environnement DOS appelé « % ProgramFiles% » vous pouvez trouver la version 32 bits ou 64 bits JRE à l'emplacement prévu, selon que vous avez utilisé le SysWOW64 32- le shell bit cmd.exe ou le shell 64 bits standard. Ensuite, vous pouvez passer ces options à la machine virtuelle Java:

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

ou

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

J'ai exactement le même problème: dans l'environnement 64 bits si les deux 32 ans 64 bits JDK/JRE sont installés ces outils toujours détecter la version 64 bits. J'ai corrigé le code source (java + C++) pour créer ma propre version et recompiler tout. J'ajoute une case à cocher pour forcer la détection JDK/JRE 32 bits dans l'environnement Windows 64 bits. Il suffit de télécharger la version et de l'utiliser comme celle d'origine.

Version: launch4j-3.0.2-win32_Java32bitsDetection

+0

Merci mon ami, meilleure solution sur cette page pour l'instant! – Edgar

+2

Excellent travail ... Avez-vous envisagé de soumettre votre patch aux développeurs de launch4j? Ils ont un problème ouvert pour cela: http://sourceforge.net/tracker/?func=detail&aid=2813453&group_id=95944&atid=613100 – jumar

1

j'ai rencontré il y a quelque temps le même problème et fourchue du projet, de sorte que l'interface utilisateur expose une option pour forcer qui devrait trouver une machine virtuelle Java 32 bits, vous pouvez saisir le programme d'installation de launch4j 3.0.3 avec le patch de:

http://fbergmann.github.io/launch4j/files/SetupLaunch4j_3.0.3.exe

et lire la suite ici:

http://frank-fbergmann.blogspot.de/2012/11/launch4j-for-32bit.html
http://fbergmann.github.io/launch4j/

0

Pour tous les utilisateurs d'applications Launch4j comme Areca qui se piquaient par celui-ci, et ont besoin d'un travail rapide autour, regardez dans le répertoire où l'application est lancée et vous trouverez une ligne de commande java complète pour exécuter votre programme dans un fichier nommé launch4j.log. Il suffit de créer un fichier bat ou un script en utilisant java vm que vous préférez et lancez-le avec la ligne de commande complète dans le journal.

0

Ceci est une vieille question et Launch4J a été mis à jour depuis qu'il a été demandé. Il y a maintenant un contrôle d'interface utilisateur dédié pour sélectionner la version de la JVM à préférer. Les options sont actuellement:

  • 64-bits uniquement
  • First 64 bits, 32 bits
  • First 32 bits, 64 bits
  • 32 bits uniquement

Le dernier, bien sûr, est exactement ce que l'OP a demandé.

Launch4J JVM Selection Dialog

Questions connexes