为了账号安全,请及时绑定邮箱和手机立即绑定

覆盖 install4j Unix 启动器WM_CLASS属性

覆盖 install4j Unix 启动器WM_CLASS属性

largeQ 2022-09-14 17:52:20
是否可以在 Linux 环境中覆盖 install4j 的设置?WM_CLASS目前,执行xprop WM_CLASS在我的应用程序上部署了 install4j 始终返回 。在创建正确的.desktop文件时,这是一个问题,我不想将使用 install4j 部署的所有应用程序组合在一起。com-install4j-runtime-launcher-UnixLauncher我收集这个问题处理一个类似的问题。但是,答案对我不起作用。提到的编译器变量没有记录在我能找到的任何地方,据我所知,它什么都不做。sys.ext.windowClass
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

在 Linux 上,窗口管理器使用属性对窗口进行分组并分配正确的图标。WM_CLASS


可以使用 xprop 检查此属性:


xprop WM_CLASS

若要指定 .desktop 文件应影响哪些WM_CLASS,可以在桌面文件中使用以下属性:StartupWMClass


StartupWMClass=<my-applications-wm-class>

install4j 的问题在于所有已部署的应用程序都将用作WM_CLASS。com-install4j-runtime-launcher-UnixLauncher


正如 Ingo Kegel 在他现在编辑过的对此问题的回答中提到的那样,可以通过使用以下代码在 Java 应用程序中显式设置WM_CLASS窗口属性来规避此问题:


String wmClass = ...;

Toolkit toolkit = Toolkit.getDefaultToolkit();

Class<?> toolkitClass = toolkit.getClass();


if (Objects.equals("sun.awt.X11.XToolkit", toolkitClass.getName())) {


    Field awtAppClassName = toolkitClass.getDeclaredField("awtAppClassName");

    awtAppClassName.setAccessible(true);

    awtAppClassName.set(null, wmClass);

}

如果在应用程序启动时有初步对话框(例如,用于选择工作区),则必须单独对所有对话框执行此操作。


查看完整回答
反对 回复 2022-09-14
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信