J’ai créé un programme d’installation DEB de mon application Java pour les systèmes basés sur Debian. Dans mon package DEB, j’utilise un fichier * .desktop comme celui-ci:
[Desktop Entry] Encoding=UTF-8 Version=${version} Type=Application Terminal=false Exec=java -jar /usr/lib/name-of-my-app/${jar} Name=${name} Icon=/usr/share/icons/hicolor/128x128/apps/name-of-my-app.png
Tout fonctionne correctement, mes applications s’installent bien et fonctionnent bien. Mais j’ai remarqué une chose très étrange: après la première exécution de mon application sur Ubuntu, tous les autres processus nommés “java” dans tout le système ont maintenant l’icône, j’ai spécifié dans le fichier * .desktop. Est-ce un bug Ubuntu? Est-ce un bug dans mon installateur?
Pour ceux qui recherchent une solution pour leurs applications Java sous Ubuntu et autres Linux. Il semble y avoir 2 façons de le faire, selon la boîte à outils de l’interface utilisateur que vous utilisez.
Pour ceux qui utilisent AWT et / ou Swing (qui à leur tour est basé sur AWT), vous n’avez qu’une solution pour le moment. http://elliotth.blogspot.com/2007/02/fixing-wmclass-for-your-java.html – ce gars a réussi à corriger le WM_CLASS:
Toolkit xToolkit = Toolkit.getDefaultToolkit(); java.lang.reflect.Field awtAppClassNameField = xToolkit.getClass().getDeclaredField("awtAppClassName"); awtAppClassNameField.setAccessible(true); awtAppClassNameField.set(xToolkit, "MyAppName");
Pour ceux qui utilisent SWT, il existe un moyen plus simple et documenté:
Display.setAppName("MyAppName");
Après avoir terminé (1) ou (2), vous pouvez maintenant tester cela en exécutant
xprop|grep WM_CLASS
Cela changera votre curseur pour être une croix. Avec le nouveau curseur croisé, cliquez sur la fenêtre de votre application en cours d’exécution et assurez-vous que la sortie est
WM_CLASS(STRING) = "MyAppName", "MyAppName"
où “MyAppName” est la chaîne que vous avez passée à AWT / SWT plus tôt.
Si tout se passe bien, ajoutez une ligne au fichier MyAppName.desktop comme suit:
StartupWMClass=MyAppName