Значок Java отображается вместо значка приложения; устанавливается с помощью install4j

Значок Java отображается вместо значка приложения; устанавливается с помощью install4j

У меня есть приложение 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запись.

Связанный контент