Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu DEB安装程序使所有Java应用程序具有相同的图标_Java_Ubuntu_Icons_Deb - Fatal编程技术网

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

Ubuntu DEB安装程序使所有Java应用程序具有相同的图标,java,ubuntu,icons,deb,Java,Ubuntu,Icons,Deb,我已经为基于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

我已经为基于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吗?

适用于那些在Ubuntu和其他Linux中寻找Java应用程序解决方案的人。根据您使用的UI工具包,似乎有两种方法可以做到这一点

  • 对于那些使用AWT和/或Swing(这反过来又基于AWT)的人来说,目前只有一个解决方法。-这家伙设法修复了WM_类:

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

    Display.setAppName("MyAppName");
  • 完成(1)或(2)之后,现在可以通过运行

    xprop|grep WM_CLASS
    
    它会将光标更改为十字符号。使用新的交叉符号光标,单击正在运行的应用程序的窗口,确保输出是正确的

    WM_CLASS(STRING) = "MyAppName", "MyAppName"
    
    其中“MyAppName”是您先前传递给AWT/SWT的字符串

    如果一切正常,则向MyAppName.desktop文件添加一行,如下所示:

    StartupWMClass=MyAppName
    

    也许这篇帖子仍然有效:@tetetet哇,这很简单,正是我所需要的。谢谢!你能把这个作为答案,这样我就可以接受了吗?你已经写得很好了,比我写得好。请接受你自己的答案。