Question

Exigences

Je veux publier une application Java GUI sur Windows 7. Cette application utilise Swing Toolkit et n'a pas besoin de code natif. L'application est installée en utilisant NSIS installateur. Je veux intégrer cette application dans Windows 7 aussi bien que possible. Cela signifie:

  • Lorsque l'application est en cours d'exécution, il doit être possible d'épingler l'application de la barre des tâches.
  • Il doit être possible d'associer des fichiers de données avec l'application de sorte que Windows ouvre ces fichiers avec mon application.
  • doit automatiquement avec le 32 bits Java Runtime et avec le moteur d'exécution Java 64 bits. Ainsi, lorsque l'utilisateur désinstalle un 32 bits Java et installe un 64 bit Java à la place (ou vice-versa), alors ma demande doit encore travailler.
  • Doit prendre en charge les grandes polices de réglage de Windows. Je ne comprends pas vraiment cette fonctionnalité. Je sais juste que certaines applications ignorent complètement, d'autres (comme Google Chrome) sont pixel-échelle (Il regarde vraiment moche) et d'autres le soutiennent en utilisant simplement des polices plus grandes comme prévu (c'est ce que je veux et, normalement, il fonctionne. Seule la solution WinRun4J mentionné ci-dessous ne fonctionne pas avec elle).

solutions testées

WinRun4J

WinRun4j est un fichier EXE qui lance l'application Java. Parce que l'application ne fourche pas un nouveau processus Java de Windows pense que le fichier EXE est l'application. Donc, il n'y a pas de problème avec la barre des tâches. Les associations de fichiers fonctionne parce que les fichiers peuvent être simplement associés au fichier EXE.

Problèmes:

  • ne supporte pas les polices de grande taille. Fenêtre d'application est pixel mis à l'échelle à la place (comme Google Chrome).
  • Deux fichiers EXE doivent être utilisés en fonction du JRE installé. Ainsi, lorsque le JRE 64 bits est installé, l'application doit être démarré avec le fichier EXE 64 bits. Lorsque 32 bits ins installés, l'JRE autre EXE doit être utilisé. Ce n'est pas facile à utiliser car l'utilisateur ne comprend pas pourquoi il doit utiliser le fichier EXE 32 bits sur un système d'exploitation 64 bits lorsque seulement 32 bits JRE est installé.

Launch4j

Launch4j crée un EXE 32 bits qui lance un processus Java externe pour démarrer l'application Java. Donc, contrairement à WinRun4J il peut également démarrer un 64 bit Java.

Problèmes:

  • Impossible épingler l'application à la barre des tâches.
  • System.out.println ne sera pas imprimé à la console si headerType="gui", peu importe si l'application est lancée depuis la console.

JAR

Sur Windows, vous pouvez simplement double-cliquez sur le fichier JAR pour démarrer l'application. Installé JRE n'a pas d'importance, fonctionne tout simplement. Mais ...

Problèmes:

  • Application ne peut pas être épinglé à la barre des tâches.
  • Impossible de créer un raccourci dans le menu Démarrer.
  • ne peut pas les fichiers associés à un fichier JAR.

BAT / CMD

Un fichier batch simple comme cela peut être utilisé pour démarrer l'application:

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

Un raccourci peut être créé pour ce fichier de commandes pour définir une icône personnalisée.

Problèmes:

  • Une fenêtre DOS apparaît lorsque l'application est lancée.
  • Le fichier batch ne sait pas où se trouve javaw.exe. Selon la version java (32 ou 64 bits) est installé, il peut être situé à la place c:\windows\syswow64 et Windows ne redirige pas cet appel de fichiers batch automatiquement. En utilisant la variable d'environnement JAVA_HOME est un non-go parce que Java ne définit pas automatiquement.
  • Lors de l'association des fichiers avec le fichier de commandes alors aucune icône personnalisée peut être réglée.
  • soutien Taskbar ne fonctionne pas correctement. L'application peut être épinglé lorsque le fichier de commandes est démarré manuellement, mais lorsque vous double cléchant un fichier associé à la place il n » travail.

Raccourci

Au lieu d'utiliser un fichier de commandes, il est possible de créer uniquement un raccourci pour lancer l'application. Il lie à cette commande: c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar". Windows redirige automatiquement cet appel au répertoire SysWOW64 si un 32 bit Java JRE est installé.

Problèmes:

  • Pas possible de fichiers associés avec elle parce que Windows accepte uniquement les fichiers EXE / COM / PIF / BAT / CMD comme cibles d'association. fichiers LNK ne fonctionnent pas.

Question

Y at-il une autre solution qui répond à toutes les exigences d'en haut? Ou sont-il des astuces pour résoudre les problèmes avec les solutions mentionnées?

Solution

Après avoir résolu le problème épinglant-barre des tâches en utilisant des regards Launch4j comme la meilleure solution. Launch4j peut facilement être intégré dans un projet Maven (Avec cette ou ce plugin ), la configuration est assez facile et tout fonctionne hors de la boîte, sauf épingler la barre des tâches . Pour la barre des tâches épinglage l'application Java doit définir une appModelUserId comme expliqué dans la réponse à cette question .

De plus, l'application Java doit être installé par un installateur qui doit installer au moins un pointage de raccourci vers le fichier EXE. Ce raccourci doit également contenir le appModelUserId. Avec NSIS cela peut être fait avec le WinShell plug-in et une configuration comme ceci:

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

ce raccourci doit exister que pour une raison inconnue. Vous ne devez pas l'utiliser. Vous pouvez double-cliquer sur le fichier EXE et la barre des tâches épinglage fonctionne toujours. Vous pouvez même créer le raccourci dans certains sous-dossier de votre dossier d'application. arrêts de travail Taskbar-épingler lorsque le dernier raccourci du fichier EXE est supprimé.

Était-ce utile?

La solution

Essayez Launch4j ( http://launch4j.sourceforge.net/ ), son simple pot à enveloppe exe (emballage en fait le pot est en option). Il devrait résoudre vos besoins icône et Taskbar. Il est également capable de localisation installée (JRE certaines règles configurables). Le problème de la police, je ne comprends pas bien, Swing doit utiliser automatiquement les polices en fonction des paramètres Windows, à moins que vous en quelque sorte Ecraser que dans les options de JRE ou dans le code.

Autres conseils

- Je n'envisager de distribuer une application toute autre manière, ces jours-ci .

L'utilisateur n'a pas besoin d'avoir au moins J2SE 1.4; si vos applications a besoin d'une version plus récente, Web Start téléchargera automatiquement un JRE approprié.

Voir la référence JNLP pour les balises d'intégration de bureau (shortcut et offline-allowed), et les associations de fichiers (association). Ceux-ci sont pris en charge que dans WS 1.5 si.

J'utilise personaly Launch4j (par Maven avec maven-launch4j-plugin pour être encore plus précis), et je mets en œuvre la gestion de la zone de notification à partir de mon application ... (Voir http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6 / systemtray / ).

J'ai eu un bon succès avec WinRun4J dans l'ensemble, mais je n'ai pas vraiment fait beaucoup avec les polices, donc je vous avoue que je ne suis pas sûr que je comprends pourquoi vous avez la question que vous décrivez là.

D'après ce que vous décrivez, cependant, il semble que vous avez des exigences très spécifiques à partir d'un lanceur natif Java. Pourquoi ne pas simplement écrire votre propre? Vous pourriez commencer par quelque chose comme WinRun4J (qui est open source, sous licence Eclipse CPL) et juste le modifier selon vos besoins.

Sinon, vous pouvez regarder dans les lanceurs indigènes utilisés par d'autres programmes. L'Eclipse et NetBeans lance deux semblent fonctionner assez bien, et les deux sont open source. Vous pourriez être en mesure d'adapter l'un d'entre eux assez facilement ainsi.

En aparté, vérifiez également la nouvelle fonctionnalité d'avoir votre application dans le tooltray / systemtray:

Oracle a tutoriel sur la façon d'utiliser la plateau de système.

C'est Java SE 6 concernant .... me fait aussi bobineuse ce que d'autres goodies pourrait être dans les nouveaux Java 7?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top