Quelle est la meilleure façon de démarrer des applications Java sur Windows 7?

exigences

je veux publier une application Java GUI sur Windows 7. Cette application utilise le swing Toolkit et n'a pas besoin de code natif. L'application est installée à l'aide d'un installateur NSIS . Je veux intégrer cette application dans Windows 7 aussi bon que possible. Cela signifie:

  • Lorsque l'application est en cours d'exécution, il doit être possible d'épingler l'application à 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 fonctionner automatiquement avec le Java Runtime 32 bits et avec le Java runtime 64 bits. Ainsi, lorsque L'utilisateur désinstalle un Java 32 bits et installe un Java 64 bits à la place (ou vice-versa), alors mon application doit encore fonctionner.
  • doit prendre en charge la configuration des grandes polices de Windows. Je ne comprends pas vraiment ce caractéristique. Je sais juste que certaines applications l'ignorent complètement, d'autres (comme Google Chrome) sont à l'échelle du pixel (semble vraiment laid) 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ée ci-dessous ne fonctionne pas avec elle).

solutions testées

WinRun4J

WinRun4j est un fichier EXE qui lance le Java application. Parce que l'application n'est pas bifurquée un nouveau processus Java Windows pense que le fichier EXE est l'application. Il n'y a donc aucun problème avec la barre des tâches. Associations de fichiers fonctionne parce que les fichiers peuvent être simplement associés avec le fichier EXE.

problèmes:

  • ne supporte pas les grandes polices. La fenêtre d'Application est pixel-scaled à la place (comme Google Chrome).
  • deux EXE différents les fichiers doivent être utilisés en fonction du JRE installé. Ainsi, lorsque le JRE 64 bits est installé, l'application doit être lancée avec le fichier EXE 64 bits. Lorsqu'un ins de 32 bits est installé, l'autre EXE doit être utilisé. Ce n'est pas facile à utiliser car l'utilisateur ne comprend pas pourquoi il doit utiliser L'EXE 32 bits sur un système d'exploitation 64 bits quand seulement un JRE 32 bits 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 aussi démarrer un Java 64 bits.

problèmes:

  • ne peut pas épingler l'application à la barre des tâches.
  • System.out.println n'imprimera pas à la console si headerType="gui" , peu importe si l'application est commencée à partir de la console.

POT

sur Windows vous pouvez simplement double-cliquer sur le fichier JAR pour démarrer l'application. Installé JRE ne compte pas, fonctionne simplement. Mais...

problèmes:

  • l'Application ne peut être épinglé à la barre des tâches.
  • ne peut pas créer de raccourci dans le menu Démarrer.
  • ne peut pas associer des fichiers avec un fichier JAR.

BAT / CMD

A un simple fichier par lot comme celui-ci peut être utilisé pour démarrer l'application:

@echo off
start c:windowssystem32javaw.exe -jar "c:program filesmyappmyapp.jar" %1

un raccourci peut être créé pour ce fichier batch afin de 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ù javaw.exe est localisé. En fonction de la version java installée (32 ou 64 bits), il se peut que situé dans c:windowssyswow64 à la place et Windows ne redirige pas cet appel à partir de fichiers par lot automatiquement. L'utilisation de la variable d'environnement JAVA_HOME est également un non-go Car Java ne le définit pas automatiquement.
  • dans ce cas, aucune icône personnalisée ne peut être définie.
  • le support de la barre des tâches ne fonctionne pas correctement. Application peut être épinglé à elle lorsque le fichier de lot est lancé manuellement, mais lorsque double cliquant sur un fichier associé au lieu de cela, alors il ne fonctionnera pas.

raccourci

au lieu d'utiliser un fichier batch, il est possible de créer seulement un raccourci pour démarrer l'application. Il renvoie à cette commande: c:windowssystem32javaw.exe -jar "c:program filesmyappmyapp.jar" . Windows redirige automatiquement cet appel vers le répertoire SysWOW64 si un Java JRE 32 bits est installé.

problèmes:

  • impossible d'y associer des fichiers parce que Windows n'accepte que les fichiers EXE/COM/PIF/BAT/CMD comme cibles d'association. Les fichiers informatiques ne marchent pas.

Question

y a-t-il une autre solution qui réponde à toutes les exigences d'en haut? Ou il y a des astuces pour résoudre les problèmes avec les solutions mentionnées?

Solution

après avoir résolu le problème de pinning taskbar en utilisant Launch4j ressemble à la meilleure solution. Launch4j peut facilement être intégré dans un projet Maven (avec ce ou ce plugin), la configuration est assez facile et tout fonctionne hors de la boîte sauf pinning taskbar. Pour taskbar-pinning L'application Java doit définir un appModelUserId comme expliqué dans la réponse à cette question .

en outre, L'application Java doit être installée par un installateur qui doit au moins installez un raccourci pointant vers L'EXE. Ce raccourci doit également contenir l'appModelUserId. Avec NSIS cela peut être fait avec le plugin WinShell et une configuration comme celle-ci:

CreateShortCut "$SMPROGRAMSMyApp.lnk" 
    "$INSTDIRmyapp.exe" "" "$INSTDIRmyapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMProgramsMyApp.lnk" "MyAppModelUserId"

pour une raison inconnue ce raccourci ne doit exister. Vous n'avez pas à l'utiliser. Vous pouvez double-cliquer L'EXE et taskbar-pinning fonctionne toujours. Vous pouvez même créer le raccourci dans certains sous-dossier de votre dossier d'application. Arrêt de l'épinglage de la barre des tâches fonctionne lorsque le dernier raccourci du fichier EXE est supprimé.

36
demandé sur Community 2012-02-17 18:43:05

5 réponses

Try Launch4j ( http://launch4j.sourceforge.net / ), c'est un simple pot pour exe wrapper (en fait, l'emballage du pot est facultatif). Il devrait résoudre votre icône et les exigences de la barre des tâches. Sa localisation également capable installé JRE's (certaines règles configurables). Le problème de police que je ne comprends pas tout à fait, Swing devrait utiliser automatiquement des polices en fonction des paramètres de Windows, à moins que vous ne l'écrasiez d'une façon ou d'une autre dans les options JRE ou dans le code.

7
répondu Durandal 2012-02-17 15:24:07

Java Web Start - Je n'envisagerais pas de distribuer une application d'une autre manière, ces jours-ci.

l'utilisateur doit avoir au moins J2SE 1.4; Si vos applications ont besoin d'une version ultérieure, Web Start téléchargera automatiquement une JRE appropriée.

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

6
répondu Dmitri 2012-02-17 15:44:57

j'utilise personnellement Launch4j (à travers maven avec le maven-launch4j-plugin pour être encore plus précis), et je mets en œuvre la gestion de plateau de système à partir de mon application... (Voir http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/systemtray / ).

2
répondu Yanflea 2012-02-18 01:09:58

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 vais avouer que je ne suis pas sûr de comprendre pourquoi vous avez le problème que vous décrivez là.

de ce que vous décrivez, cependant, il semble que vous avez des exigences très spécifiques d'un lanceur Java native. Pourquoi ne pas écrire les vôtres? Vous pouvez commencer avec quelque chose comme WinRun4J (qui est open source, autorisé sous le CPL Eclipse) et juste le modifier à vos besoins.

alternativement, vous pouvez regarder dans les lanceurs natifs utilisés par d'autres programmes. Les lanceurs Eclipse et NetBeans semblent fonctionner assez bien, et tous les deux sont open source. Vous pourriez être en mesure de s'adapter l'un d'eux assez facilement.

1
répondu Daniel Pryden 2012-02-17 23:38:20

comme une mise à part, aussi vérifier la nouvelle fonctionnalité pour avoir votre application dans la tooltray / systemtray:

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

c'est lié à Java SE 6....me fait également winder ce que d'autres bonnes choses pourraient être dans le nouveau Java 7?

1
répondu DotJava 2012-02-17 23:57:37