В Linux диспетчеры окон группируют окна и назначают правильные значки с помощью свойства WM_CLASS
.
Это свойство можно проверить с помощью xprop :
xprop WM_CLASS
Чтобы указать, на какой WM_CLASS должен влиять файл .desktop, вы можете использовать свойство StartupWMClass
в файле рабочего стола:
StartupWMClass=<my-applications-wm-class>
Проблема с install4j заключается в том, что все развернутые приложения будут использовать com-install4j-runtime-launcher-UnixLauncher
какWM_CLASS.
Как Инго Кегель упоминает в своем теперь отредактированном ответе на этот вопрос , это можно обойти, если явно установить свойство окна WM_CLASS в приложении Java с помощью следующего кода:
String wmClass = ...;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class<?> toolkitClass = toolkit.getClass();
if (Objects.equals("sun.awt.X11.XToolkit", toolkitClass.getName())) {
Field awtAppClassName = toolkitClass.getDeclaredField("awtAppClassName");
awtAppClassName.setAccessible(true);
awtAppClassName.set(null, wmClass);
}
Если у вас есть предварительные диалоги при запуске приложения (например, для выбора рабочей области), важно, чтобы вы делали это для всех диалогов по отдельности.