覆盖install4j UnixLauncher WM_CLASS属性

问题描述 投票:1回答:1

是否有可能在Linux环境中覆盖install4j设置的WM_CLASS

此刻,执行

xprop WM_CLASS 

在我的应用程序部署与install4j总是返回com-install4j-runtime-launcher-UnixLauncher。创建正确的.desktop文件时出现问题,我不想将使用install4j部署的所有应用程序组合在一起。

我收集this question处理类似的问题。但是,答案对我不起作用。提到的sys.ext.windowClass编译器变量没有记录在我能找到的任何地方,据我所知,它什么也没做。

java linux deployment install4j
1个回答
0
投票

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

可以使用xprop检查此属性:

xprop WM_CLASS

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

StartupWMClass=<my-applications-wm-class>

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

正如Ingo Kegel在他现在编辑的this question答案中提到的,可以通过使用以下代码在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);
}

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

© www.soinside.com 2019 - 2024. All rights reserved.