Linux中的Java系统托盘应用程序(Ubuntu)从服务(守护程序)启动

时间:2013-11-13 10:24:02

标签: java ubuntu awt

您好我正在为linux(ubuntu)编写一个java应用程序,它有托盘应用程序和守护程序应用程序服务。

我能够使用yajsw作为守护进程执行主应用程序,在用户登录系统时我想要通知服务已经实现(我已编写脚本并放在/etc/profile.d/文件夹中脚本是从那里开始执行我使用TCP套接字连接连接到主应用程序并传递登录的用户名)

现在,从主应用程序中,我想在当前登录的用户桌面中启动托盘应用程序,该桌面将显示托盘图标(SystemTray的{​​{1}})和弹出菜单。我为托盘申请创建了单独的java.awt文件。

2 个答案:

答案 0 :(得分:1)

一种方法是在另一个过程中启动托盘应用程序

Process p = Runtime.
               getRuntime().
               exec(new String[]{"bash","-c","java -jar /path/to/yourjar"});

或者,您可以使用操作系统。 Gnome,KDE和Unity都支持在登录时自动启动应用程序。例如,在Gnome上,登录时会自动启动~/.config/autostart/中的脚本。

就个人而言,我认为最好的方法是

  1. 使用操作系统在登录时自动启动系统托盘应用程序
  2. 在初始化期间,检查守护程序是否从系统托盘应用程序运行
  3. 从守护程序显示更新,或者如果守护程序不可用则显示警告

答案 1 :(得分:0)

在/etc/X11/Xsession.d/98script下添加了脚本文件,该文件将在创建会话后在用户登录时调用,以便您可以获取$ DISPLAY值,这对于Java托盘应用程序启动非常重要。会话。 从名为daemon的java应用程序脚本中侦听tcp端口 从守护进程java应用程序执行startapp脚本传递登录的用户名和他的DISPLAY在startapp脚本中导出DISPLAY并导出USERNAME并执行托盘应用程序,该应用程序将在用户会话中启动并且托盘显示在同一显示区域