Как настроить имя программы в уведомлении в панели задач в AWT?

AWT TrayIcon класс имеет метод под названием displayMessage, в котором отображается собственное сообщение ОС, которое в Windows 10 выглядит следующим образом:

введите описание изображения здесь

когда вызывается так:

Image image = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/isotype.png"));
final TrayIcon trayIcon = new TrayIcon(image, appName());
trayIcon.displayMessage("Caption", "Text text text", TrayIcon.MessageType.INFO);

Как настроить строку "Java (TM) Platform SE binary" ). Когда я создаю автономный exe для своего приложения, вместо этого он читает "Blah.exe", в то время как я бы предпочел, чтобы он читал только "Бла".

Чтобы упаковать приложение, я использую toolchain JavaFX через отличный JavaFX-Gradle-Plugin.

Ответ 1

Одним из способов решения проблемы является использование TrayIcon.MessageType.NONE. В этом случае вы не получите последнюю строку, но вы также не получите значок INFO, WARNING или ERROR.

Но хорошо, что вы можете получить значок своего приложения в отображаемом сообщении. Если вы создаете TrayIcon с некоторым изображением типа TrayIcon trayIcon = new TrayIcon(image, "Tooltip"), а затем упакуете приложение с помощью JavaFX-Gradle-Plugin, метод displayMessage будет использоваться повторно это изображение, и вы получите что-то вроде этого:

Ответ 2

Поведение TrayIcon зависит от платформы. На Mac нет такой вещи, как "Java (TM) Platform SE binary" и исполняемый файл.

Если вы хотите изменить поведение на своей платформе, я думаю, вы могли бы играть с awt.toolkit. Видеть https://docs.oracle.com/javase/8/docs/api/java/awt/Toolkit.html#getDefaultToolkit--

Ответ 3

В моей системе (попробовал как Java 8u151, так и Java 9.0.1 в Windows 10) с минимальной настройкой build.gradle из javafx-gradle-plugin, я не нашел какой-либо опции конфигурации для этого имени, но я могу управлять им: пакетщик просто берет имя родительского каталога, содержащего мои источники.

Пример с "Foo Bar":
Исполняемое имя = "FooBar.exe"
Отображаемое имя = "Foo Bar"
введите описание изображения здесь

(То, что я не понимаю, поэтому вы видите "Blah.exe" вместо имени родительского каталога...)

Ответ 4

Чтобы изменить всплывающий текст, который в вашем опубликованном скриншоте отображается как Java(TM) Platform SE binary в Blah.exe до Blah, вы можете использовать, например, Resource Hacker ™.

Измените в разделе Version Info значение для FileDescription - Blah либо интерактивное в графическом интерфейсе, либо в командной строке.

Найдите ниже простой пример, который необходимо изменить для ваших нужд.

versioninfo.rc ресурс script, содержащий информацию для ресурса VERSIONINFO

1 VERSIONINFO
{
BLOCK "StringFileInfo"
{
    BLOCK "00000409"
    {
        VALUE "FileDescription", "Blah"
    }
}

BLOCK "VarFileInfo"
{
    VALUE "Translation", 0x0000 0x0409
}
}

скомпилировать ресурс script в файл ресурса

ResourceHacker.exe -open versioninfo.rc \
    -save versioninfo.res \
    -action compile 
    -log CONSOLE

добавить ресурс к исполняемому файлу

ResourceHacker.exe -open Blah.exe \
    -save Blah_new.exe \
    -resource versioninfo.res \
    -action addoverwrite \
    -mask VERSIONINFO,1,0 \
    -log CONSOLE

Для полноты здесь команда для извлечения VERSIONINFO из EXE файла.

 ResourceHacker.exe -open Blah.exe \
     -save versioninfo.rc \
     -action extract \
     -mask VERSIONINFO,, \
     -log CONSOLE