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”而我更喜欢它,如果只读取“Blah”。
要打包应用程序,我通过优秀的JavaFX-Gradle-Plugin使用JavaFX工具链。
一个解决方法是使用TrayIcon.MessageType.NONE
。在这种情况下,您根本不会获得最后一行,但您也不会获得任何INFO,WARNING或ERROR图标。
但好处是您可以在显示的消息中获取应用程序图标。如果您使用TrayIcon
等图像创建TrayIcon trayIcon = new TrayIcon(image, "Tooltip")
,然后使用JavaFX-Gradle-Plugin打包您的应用程序,displayMessage
方法将重用此图像,您将得到如下内容:
TrayIcon的行为取决于平台。在Mac上,没有“Java(TM)Platform SE binary”这样的东西,也没有可执行文件。
如果你想改变平台上的行为,我猜你可以玩awt.toolkit。见https://docs.oracle.com/javase/8/docs/api/java/awt/Toolkit.html#getDefaultToolkit--
在我的系统上(在Windows 10上尝试了Java 8u151和Java 9.0.1),使用来自build.gradle
的javafx-gradle-plugin的最小设置,我没有找到该名称的任何配置选项,但我可以控制它:打包器只需要名称包含我的源的父目录。
“Foo Bar”示例: 可执行文件名=“FooBar.exe” 显示的名称=“Foo Bar”
(然而,我没有得到的是为什么你看到“Blah.exe”而不是你父目录的名字......)
要将弹出的文本更改为Java(TM) Platform SE binary
中显示为Blah.exe
的Blah
,您可以使用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