2010-04-22 20 views
10

Estoy usando Launch4J para iniciar mi aplicación Java y si hay un JRE x64 presente en el sistema, parece que Launch4J lo prefiere.Configurar Launch4J para usar JVM de 32 bits solamente

Desafortunadamente, mi aplicación no se puede ejecutar en una JVM de 64 bits porque estoy cargando una DLL de 32 bits, lo que no es posible y lleva a un InsatisfiedLinkError.

¿Hay alguna manera de forzar/engañar a Launch4J para que use solo una JVM de 32 bits?

+0

Es casi 2.012, y no parece haber habido una actualización en febrero de 2011 y todavía no parece haber sido fijado después de leer el tablón de anuncios de este tema. – KJW

+0

Si apunta a Launch4j para usar el shell cmd.exe de windows de 32 bits en el directorio SYSWOW64, entonces no sería posible ejecutar una JVM de 64 bits desde ese shell. Solo un pensamiento ... – djangofan

Respuesta

5

Tenía este problema exacto hace aproximadamente un año, usando Lauch4J para envolver un pequeño programa en Java que requiere una de 32 bits DLL (SWT-WIN32.DLL, como sucedió).

Descubrí que si había JVM de 32 bits y de 64 bits instaladas, Launch4J siempre favorecería la de 64 bits. Solo funcionaría si la JVM de 64 bits se desinstalara, lo que obviamente no era una solución práctica.

No encontré manera de que Launch4J prefiera (y requiera) la JVM de 32 bits, después de buscar bastante y publicar preguntas en su foro.

Por lo tanto, evalué una buena cantidad de convertidores JRE alternativos (utilicé esta lista: http://www.excelsior-usa.com/articles/java-to-exe.html).

Terminé asentándome en Jar2Exe, que era el único que tenía las características que necesitaba. No es gratis, aunque hay una versión de evaluación, y creo que no fue costoso.

Espero que esto ayude!

+0

Gracias por la pista de Jar2Exe, eso es perfecto para mi empresa. – brimborium

1

No sé Launch4J, pero puede obtener la Información sobre 32/64 leyendo System.getProperty("os.arch");. Si se encuentra con un sistema de 64 bits, puede cerrar el instalador con un mensaje agradable para decirle al usuario que instale una JVM de 32 bits.

Puede ajustar su código de inicio con un Contenedor para mostrar un mensaje al usuario.

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

esta es una buena sugerencia pero http://stackoverflow.com/questions/807263/how-do-i-detect-which-kind-of-jre-is-installed-32bit-vs-64bit sugiere que '" os.arch "' arroje resultados inconsistentes. – KJW

+0

No creo que esto realmente aborde la pregunta original, sin embargo. – mhucka

0

Deberá agregar un parámetro JVM durante la configuración.

Se muestra en el post a continuación sobre cómo agregarlo:

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

+0

Hasta donde yo sé, esta opción -D32 fue admitida en versiones anteriores de la JVM, pero no está documentada para Java SE6 y parece que no funciona. ¡Sin embargo, avísenos si funciona para usted! –

+0

"Lo sentimos, la página que estabas buscando en este blog no existe". Por favor, evite las respuestas de solo enlace ... – Matthieu

1

Si no le importa que incluye una copia del JDK con su aplicación, trate de pasar estos argumentos (en el MiApl. INI) a Launch4j:

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

también hay otras cosas que suceden aquí que usted podría usar:

Si no empaquetar el JRE, puede s y la opción Launch4j para usar "jreOnly" y luego, usando la variable de entorno DOS llamada "% ProgramFiles%", puede ubicar el JRE de 32 bits o de 64 bits en la ubicación esperada, dependiendo de si usó el SysWOW64 32- el shell bit cmd.exe o el shell regular de 64 bits. A continuación, puede pasar a estas opciones para 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

Tengo exactamente el mismo problema: en el entorno de 64 bits si ambos 32 ans 64 bits JDK/JRE se instalan estas herramientas siempre detectar la versión de 64 bits. He parcheado el código fuente (java + C++) para hacer mi propia versión y volver a compilar todo. Agrego una casilla de verificación para FORZAR la detección JDK/JRE de 32 bits en el entorno de Windows de 64 bits. Simplemente descarga la versión y úsalo como el original.

versión: launch4j-3.0.2-win32_Java32bitsDetection

+0

¡Gracias, compañero, la mejor solución en esta página hasta el momento! – Edgar

+2

Buen trabajo ... ¿Consideró enviar su parche a los desarrolladores de launch4j? Tienen un problema abierto para esto: http://sourceforge.net/tracker/?func=detail&aid=2813453&group_id=95944&atid=613100 – jumar

0

Para cualquier usuario de aplicaciones Launch4j como Areca que ser picado por éste, y que necesitan un trabajo rápido en torno, mira en el directorio en el que se inicia la aplicación y encontrará una línea de comandos completa de Java para funcionar su programa dentro de un archivo llamado launch4j.log. Simplemente haga un archivo o script de murciélago usando la vma java que prefiera y ejecútelo con la línea de comando completa en el registro.

0

Esta es una vieja pregunta y Launch4J se ha actualizado desde que se solicitó. Ahora hay un control de interfaz de usuario dedicado para seleccionar qué versión de la JVM prefiere. Las opciones actualmente son:

  • 64-bit sólo
  • primeros 64 bits, 32 bits
  • primeros 32 bits, 64 bits
  • 32 bits sólo

El último, por supuesto, es exactamente lo que solicitó el OP.

Launch4J JVM Selection Dialog

Cuestiones relacionadas