У меня есть приложение Java, которое я установил через install4j. Ярлык на рабочем столе показывает правильный значок приложения, который был установлен в файле .desktop; однако после запуска значок приложения не отображается в док-станции. Вместо него отображается значок Java по умолчанию.
Вот так выглядит на рабочем столе:
Но на док-станции отображается значок Java:
Я также не уверен, почему, правильное имя приложения не появляется, когда я наведите курсор на значок на панели - он называет Java вместо лаунчера.
.desktop:
#!/usr/bin/env xdg-open
[Desktop Entry]
Type=Application
Name=NMRViewJ
Exec="/home/issac/NMRViewJ/NMRViewJ"
Icon=/home/issac/NMRViewJ/.install4j/NMRViewJ.png
StartupWMClass = sun-awt-X11-XFramePeer
Categories=Application;
Это будет исправлено в install4j 8.0 примерно через 2 недели (источник: я работаю в компании, которая разрабатывает install4j).
Основная проблема заключается в том, что свойство WMClass
окон AWT установлено на основной класс. Это означает, что основной класс должен быть уникальным для приложения, но install4j вставляет свой собственный основной класс, который до 7.0 всегда одинаков. В качестве обходного пути вы можете рефлексивно изменить внутреннее состояние инструментария AWT:
Class<?> toolkitClass = Toolkit.getDefaultToolkit().getClass();
if (toolkitClass.getName().equals("sun.awt.X11.XToolkit")) {
Field awtAppClassName = toolkitClass.getDeclaredField("awtAppClassName");
awtAppClassName.setAccessible(true);
awtAppClassName.set(null, "<my unique application name>");
}
В install4j 8.0 будет создан уникальный главный класс, а сгенерированный файл .desktop будет содержать соответствующую запись StartupWMClass
.