Ubuntu DEB安装程序会使所有Java应用程序具有相同的图标

4

我已经为基于Debian的系统创建了一个Java应用程序的DEB安装程序。在我的DEB包中,我使用一个像这样的*.desktop文件:

[Desktop Entry]
Encoding=UTF-8
Version=${version}
Type=Application
Terminal=false
Exec=java -jar /usr/lib/name-of-my-app/${jar}
Name=${name}
Icon=/usr/share/icons/hicolor/128x128/apps/name-of-my-app.png

一切都运行正常,我的应用程序安装和运行良好。但我注意到一个非常奇怪的事情:在Ubuntu上第一次运行我的应用程序后,整个系统中所有名称为“java”的其他进程现在都有了我在*.desktop文件中指定的图标。这是Ubuntu的bug吗?这是我的安装程序的bug吗?

1
也许这篇帖子仍然有效:http://askubuntu.com/questions/36434/how-can-i-remove-duplicate-icons-for-launched-java-programs-in-the-launcher - TeTeT
@TeTeT 哇,太简单了,正是我所需要的。非常感谢!你能把这个作为答案吗,这样我就可以接受它了吗? - afrish
您已经把它写得很好了,比我能写的还要好。请接受您自己的答案。 - TeTeT
1个回答

1

对于那些在Ubuntu和其他Linux系统中寻找Java应用程序解决方案的人来说,似乎有两种方法可以实现,具体取决于您使用的UI工具包。

  1. 对于那些使用AWT和/或Swing(它基于AWT),目前只有一种解决方法。http://elliotth.blogspot.com/2007/02/fixing-wmclass-for-your-java.html - 这个人设法修复了WM_CLASS:

    Toolkit xToolkit = Toolkit.getDefaultToolkit();
    java.lang.reflect.Field awtAppClassNameField =
      xToolkit.getClass().getDeclaredField("awtAppClassName");
    awtAppClassNameField.setAccessible(true);
    awtAppClassNameField.set(xToolkit, "MyAppName");
    
  2. 对于那些使用SWT的人,有一种更简单、文档化的方法:

    Display.setAppName("MyAppName");
完成了(1)或(2)后,您现在可以通过运行来测试此功能。
xprop|grep WM_CLASS

它会将您的光标更改为十字形符号。使用新的十字形符号光标单击正在运行的应用程序窗口,并确保输出正确。
WM_CLASS(STRING) = "MyAppName", "MyAppName"

其中"MyAppName"是您之前传递给AWT/SWT的字符串。

如果一切顺利,那么请像以下这样在MyAppName.desktop文件中添加一行:

StartupWMClass=MyAppName

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接