2

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

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

现在从主应用程序中,我想在当前登录的用户桌面上启动托盘应用程序,它将显示托盘图标 ( SystemTrayof java.awt) 和弹出菜单。我jar为托盘应用程序创建了单独的文件。

4

2 回答 2

1

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

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

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

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

  1. 使用操作系统在登录时自动启动系统托盘应用程序
  2. 在初始化期间,检查守护程序是否正在从系统托盘应用程序运行
  3. 显示来自守护进程的更新,或在守护进程不可用时显示警告
于 2013-11-13T10:32:40.887 回答
0

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

于 2013-11-14T17:21:08.710 回答