如何在基于Swing或NetBeans平台的Java GUI应用程序中更改WM_CLASS值?

Iva*_*van 6 java swing netbeans xorg

所有基于Swing/NetBeans的Java GUI应用程序似乎都具有相同的WM_CLASS值:

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"
Run Code Online (Sandbox Code Playgroud)

可以通过发出xprop命令并指向窗口来查看此参数.定制它的实际目的是让类似Mac的扩展坞(例如AWN(以及可能是Ubuntu的Unity))区分应用程序窗口并将它们分组到应用程序的固定启动器图标下.为此工作StartupWMClass参数将在.application文件中相应地设置~/.local/share/applications/usr/share/applications.毋庸置疑,如果多个应用程序使用相同的字符串,AWN(和类似物)会感到困惑WM_CLASS.

小智 4

这篇博文Toolkit找到了控制它的字段,名为awtAppClassName。建议使用反射来修改它:

Toolkit xToolkit = Toolkit.getDefaultToolkit();
java.lang.reflect.Field awtAppClassNameField = xToolkit.getClass().getDeclaredField("awtAppClassName");
awtAppClassNameField.setAccessible(true);
awtAppClassNameField.set(xToolkit, applicationName);
Run Code Online (Sandbox Code Playgroud)