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);
}
如果在应用程序启动时有初步对话框(例如,用于选择工作区),则必须单独对所有对话框执行此操作。
添加回答
举报