如何在AWT中的托盘栏通知中自定义程序名称?

问题描述 投票:12回答:4

AWT的TrayIcon类有一个名为displayMessage的方法,它显示了Windows 10中的本机操作系统消息,如下所示:

enter image description here

当像这样调用时:

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”而我更喜欢它,如果只读取“Blah”。

要打包应用程序,我通过优秀的JavaFX-Gradle-Plugin使用JavaFX工具链。

java notifications awt
4个回答
4
投票

一个解决方法是使用TrayIcon.MessageType.NONE。在这种情况下,您根本不会获得最后一行,但您也不会获得任何INFO,WARNING或ERROR图标。

但好处是您可以在显示的消息中获取应用程序图标。如果您使用TrayIcon等图像创建TrayIcon trayIcon = new TrayIcon(image, "Tooltip"),然后使用JavaFX-Gradle-Plugin打包您的应用程序,displayMessage方法将重用此图像,您将得到如下内容:


3
投票

TrayIcon的行为取决于平台。在Mac上,没有“Java(TM)Platform SE binary”这样的东西,也没有可执行文件。

如果你想改变平台上的行为,我猜你可以玩awt.toolkit。见https://docs.oracle.com/javase/8/docs/api/java/awt/Toolkit.html#getDefaultToolkit--


3
投票

在我的系统上(在Windows 10上尝试了Java 8u151和Java 9.0.1),使用来自build.gradlejavafx-gradle-plugin的最小设置,我没有找到该名称的任何配置选项,但我可以控制它:打包器只需要名称包含我的源的父目录。

“Foo Bar”示例: 可执行文件名=“FooBar.exe” 显示的名称=“Foo Bar” enter image description here

(然而,我没有得到的是为什么你看到“Blah.exe”而不是你父目录的名字......)


2
投票

要将弹出的文本更改为Java(TM) Platform SE binary中显示为Blah.exeBlah,您可以使用Resource Hacker™

Version Info部分中将FileDescription的值更改为Blah,可以在GUI中或在命令行上进行交互。

下面是一个简单的例子,需要根据您的需要进行修改。

包含VERSIONINFO资源信息的versioninfo.rc资源脚本

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

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

将资源脚本编译为资源文件

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

为了完整性,这里是从EXE文件中提取VERSIONINFO的命令。

 ResourceHacker.exe -open Blah.exe \
     -save versioninfo.rc \
     -action extract \
     -mask VERSIONINFO,, \
     -log CONSOLE
© www.soinside.com 2019 - 2024. All rights reserved.