Pregunta

Requisitos

Quiero publicar una aplicación Java GUI en Windows 7. Esta aplicación está utilizando el kit de herramientas Swing y no necesita ningún código nativo. La aplicación se instala utilizando un NSIS instalador. Quiero integrar esta aplicación en Windows 7 lo más bueno posible. Esto significa:

  • Cuando la aplicación se ejecuta, debe ser posible fijar la aplicación a la barra de tareas.
  • Debe ser posible asociar archivos de datos con la aplicación para que Windows abra estos archivos con mi aplicación.
  • Debe trabajar automáticamente con el tiempo de ejecución Java de 32 bits y con el tiempo de ejecución Java de 64 bits. Entonces, cuando el usuario desinstale un Java de 32 bits e instala un Java de 64 bits en su lugar (o viceversa), mi aplicación aún debe funcionar.
  • Debe admitir una configuración de fuentes grandes de ventanas. Realmente no entiendo esta característica. Solo sé que algunas aplicaciones lo ignoran por completo, otras (como Google Chrome) están a escala de píxeles (se ve realmente feo) y otras lo admiten simplemente usando fuentes más grandes según lo previsto (eso es lo que quiero y normalmente funciona. Solo la solución Winrun4J mencionado a continuación no funciona con él).

Soluciones probadas

Winrun4j

Winrun4j es un archivo exe que inicia la aplicación Java. Debido a que la aplicación no desembolsa un nuevo proceso de Java, Windows cree que el archivo EXE es la aplicación. Entonces no hay problema con la barra de tareas. Las asociaciones de archivos funcionan porque los archivos se pueden asociar simplemente con el archivo exe.

Problemas:

  • No es compatible con grandes fuentes. La ventana de aplicación está escala de píxeles (como Google Chrome).
  • Se deben usar dos archivos EXE diferentes según el JRE instalado. Entonces, cuando se instala el JRE de 64 bits, la aplicación debe iniciarse con el archivo EXE de 64 bits. Cuando se instaló 32 bits JRE Ins, entonces se debe usar el otro exe. Esto no es fácil de usar porque el usuario no entiende por qué debe usar el EXE de 32 bits en un sistema operativo de 64 bits cuando solo se instala un JRE de 32 bits.

Lanzamiento4J

Lanzamiento4J Crea un EXE de 32 bits que inicia un proceso Java externo para iniciar la aplicación Java. Entonces, a diferencia de WinRun4J, también puede comenzar un Java de 64 bits.

Problemas:

  • No se puede fijar la aplicación a la barra de tareas.
  • System.out.println no imprimirá en consolar si headerType="gui", independientemente de si la aplicación se inicia desde la consola.

FRASCO

En Windows, simplemente puede hacer doble clic en el archivo JAR para iniciar la aplicación. JRE instalado no importa, simplemente funciona. Pero...

Problemas:

  • La aplicación no se puede fijar en la barra de tareas.
  • No se puede crear un atajo en el menú Inicio.
  • No se puede asociar archivos con un archivo JAR.

Bat/CMD

Se puede usar un archivo por lotes simple como este para iniciar la aplicación:

@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1

Se puede crear un atajo para este archivo por lotes para establecer un icono personalizado.

Problemas:

  • Aparece una ventana DOS cuando se inicia la aplicación.
  • El archivo por lotes no sabe dónde se encuentra javaw.exe. Dependiendo de qué versión Java (32 o 64 bits) se instale, puede ubicarse en c:\windows\syswow64 En su lugar, y Windows no redirige esta llamada desde los archivos por lotes automáticamente. Utilizando el JAVA_HOME La variable de entorno también es un no-go porque Java no establece esto automáticamente.
  • Al asociar archivos con el archivo por lotes, no se puede configurar no se puede configurar ningún icono personalizado.
  • El soporte de la barra de tareas no funciona correctamente. La aplicación se puede fijar cuando el archivo por lotes se inicia manualmente, pero cuando hace doble clic en un archivo asociado, en su lugar, no funciona.

Atajo

En lugar de usar un archivo por lotes, es posible crear solo un acceso directo para iniciar la aplicación. Se vincula a este comando: c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar". Windows redirige automáticamente esta llamada al directorio SYSWOW64 si se instala un Java JRE de 32 bits.

Problemas:

  • No es posible asociar archivos con él porque Windows solo acepta archivos EXE/COM/PIF/BAT/CMD como objetivos de asociación. Los archivos LNK no funcionan.

Pregunta

¿Hay otra solución que cumpla con todos los requisitos de arriba? ¿O hay algún truco para resolver los problemas con las soluciones mencionadas?

Solución

Después de resolver el problema de la barra de tareas usando Lanzamiento4J Parece la mejor solución. Launch4j se puede integrar fácilmente en un proyecto Maven (con este o este complemento), la configuración es bastante fácil y todo funciona fuera de la caja, excepto la fijación de la barra de tareas. Para la barra de tareas, la aplicación Java debe establecer un AppModelUserID como se explica en la respuesta a esta pregunta.

Además, la aplicación Java debe ser instalada por un instalador que al menos debe instalar un atajo que apunte al EXE. Este atajo también debe contener el AppModeluserID. Con nsis esto se puede hacer con el Complemento de Winshell y una configuración como esta:

CreateShortCut "$SMPROGRAMS\MyApp.lnk" \
    "$INSTDIR\myapp.exe" "" "$INSTDIR\myapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMPrograms\MyApp.lnk" "MyAppModelUserId"

Por alguna razón desconocida, este atajo solo tiene que existir. No tienes que usarlo. Puede hacer doble clic en el EXE y la barra de tareas todavía funciona. Incluso puede crear el acceso directo en una subcarpeta de su carpeta de aplicación. La barra de tareas deja de funcionar cuando se elimina el último atajo del archivo EXE.

¿Fue útil?

Solución

Prueba la lanzamiento4j (http://launch4j.sourceforge.net/), es un frasco simple para exe Wrapper (en realidad envolver el frasco es opcional). Debe resolver sus requisitos de icono y barra de tareas. También es capaz de ubicación de JRE instalada (algunas reglas configurables). El problema de la fuente que no obtengo, Swing debería usar automáticamente las fuentes dependiendo de la configuración de Windows, a menos que de alguna manera sobrescriba eso en las opciones JRE o en el código.

Otros consejos

Java Inicio web - No consideraría distribuir una aplicación de otra manera, en estos días.

El usuario necesita tener al menos J2SE 1.4; Si sus aplicaciones necesitan una versión posterior, Web Start descargará automáticamente un JRE apropiado.

Ver el Jnlp referencia para las etiquetas para la integración de escritorio (shortcut y offline-allowed) y asociaciones de archivos (association). Sin embargo, estos solo son compatibles en WS 1.5.

Yo uso personal Launch4j (a través de Maven con el maven-launch4j-plugin ser aún más preciso) e implemento la gestión de la bandeja del sistema desde mi aplicación ... (ver http://java.sun.com/developer/technicalarticles/j2se/desktop/javase6/systemtray/).

He tenido un buen éxito con WinRun4J en general, pero realmente no he hecho mucho con las fuentes, así que confiesaré que no estoy seguro de entender por qué tienes el problema que describes allí.

Sin embargo, por lo que describe, parece que tiene requisitos muy específicos de un lanzador nativo de Java. ¿Por qué no simplemente escribir el tuyo? Podría comenzar con algo como Winrun4J (que es de código abierto, con licencia bajo el Eclipse CPL) y simplemente modificarlo a sus necesidades.

Alternativamente, puede investigar los lanzadores nativos utilizados por otros programas. Los lanzadores Eclipse y NetBeans parecen funcionar bastante bien, y ambos son de código abierto. Es posible que también pueda adaptar uno de ellos con bastante facilidad.

Como aparte, consulte también la nueva función para tener su aplicación en ToolTray/SystemTray:

Oracle tiene un tutorial Sobre cómo usar la bandeja del sistema.

Ese es Java SE Related ... me hace envejecer también ¿qué otras golosinas podrían estar en la nueva Java 7?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top