
У меня есть приложение Java, которое я установил через install4j. Ярлык на рабочем столе показывает правильный значок приложения, который был установлен в файле .desktop; однако после запуска значок приложения не отображается на панели Dock. Вместо него отображается значок Java по умолчанию.
Вот как это выглядит на рабочем столе:
Но на панели Dock отображается значок Java:
Я также не уверен, почему при наведении курсора на значок на панели Dock не отображается правильное имя приложения — вместо этого отображается имя лаунчера Java.
.рабочий стол:
#!/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;
решение1
Это будет исправлено в 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
запись.