【问题标题】:How to alter WM_CLASS value in a Java GUI application based on Swing or NetBeans Platform?如何在基于 Swing 或 NetBeans 平台的 Java GUI 应用程序中更改 WM_CLASS 值?
【发布时间】:2012-05-22 12:18:10
【问题描述】:

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

WM_CLASS(STRING) = "sun-awt-X11-XFramePeer", "java-lang-Thread"

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

【问题讨论】:

  • 另见bug ID: 6528430
  • 看起来他们不打算着急... :-( 我希望 Gnome 3、Unity 以及 Windows 7 的现代窗口管理系统将导致 Oracle 唤醒。可悲的是,似乎他们选择了一种不同的、特定于 Unity 的方式来与 Unity 集成。
  • 顺便说一句,“Bug ID: 6528430”似乎是 Java 6 的问题。为什么不为 Java 7 和 8 提交相同的文件?我怀疑他们是否会在旧版 Java 版本中添加这样的功能,使用 Java 8 等开发中的前沿技术似乎更好。
  • 是的,有人知道如何评论和投票吗?页面看起来很静态:我可以看到一些 cmets,但我找不到如何发布我的,甚至找不到如何登录。
  • 这有帮助吗:elliotth.blogspot.it/2007/02/fixing-wmclass-for-your-java.html?对于不能改代码的应用,也可以查看这个WM代理github.com/jelmerk/window-matching-agent,这样你只需要编辑应用命令行即​​可。

标签: java swing netbeans xorg


【解决方案1】:

This blog postToolkit 中找到了控制它的字段,名为awtAppClassName。它建议使用反射来修改它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2012-06-27
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多