27

我正在寻找让我的桌面 java 程序在大多数平台(Windows、Mac OS、Linux [尤其是 Ubuntu])上在后台运行的最佳方法(守护进程/服务?)。

通过“最佳方式”,我希望找到一种方法:

  1. 需要最少数量的特定于平台的代码。
  2. 不要求用户做任何普通计算机用户不能/不会做的事情
  3. 不要成为资源狂。

我知道我的要求可能不切实际,但我希望这种情况有某种“最佳实践”。

如何前进?

4

7 回答 7

16

您可以使用Apache Commons 守护程序代码将 Java 应用程序作为服务 (Windows) 或守护程序 (Linux) 运行。

结构

守护进程由两部分组成。一种是用 C 编写的,用于与操作系统建立接口,另一种是用 Java 编写的,提供 Daemon API。

平台

支持 Win32 和类 UNIX 平台。对于 Win32 平台,请使用 procrun。对于类 UNIX 平台,请使用 jsvc。

Java 代码

您必须编写一个实现以下方法的类(MyClass):

* void load(String[] arguments): Here open the configuration files, create the trace file, create the ServerSockets, the Threads
* void start(): Start the Thread, accept incoming connections
* void stop(): Inform the Thread to live the run(), close the ServerSockets
* void destroy(): Destroy any object created in init()
于 2008-12-29T22:45:56.750 回答
9

您可以使用Java Service Wrapper将任何 Java 程序转换为服务/守护程序。它被多个 OSS 项目使用,并作为 Nexus Maven 存储库管理器的一部分提供,以便可以作为开箱即用的服务安装。要使用它,您,作者,只需要创建一个配置文件,然后运行一个简单的批处理文件来在 Windows 上创建服务或将一个 init 脚本复制到 Linux 上的正确运行级别。

于 2008-11-28T20:28:01.887 回答
7

您可以使用 SystemTray类并将您的应用程序安装为默认平台中的任何其他应用程序。

对于 Windows,它可能是在启动时运行的计划任务。对于 Linux 和 OSX,我不知道(除了 crontab 有点太技术性了),但我很确定他们都有办法轻松地做同样的事情。

不幸的是(截至今天)Apple 还没有完成 1.6 端口。

它不会是真正的恶魔,而是像 Google 桌面这样的应用程序。

我听说石英是一个不错的选择。但我从未使用过它。

于 2008-11-28T19:54:19.007 回答
1

如果您不需要免费的解决方案,您可以使用 Advanced Installer (www.advancedinstaller.com),它可以从您的 JAR 中制作 win-service 以及 MacOS 安装程序等等。

于 2011-08-13T11:37:45.220 回答
0

查看JDIC, Java 桌面集成组件项目。它支持桌面集成,如系统托盘(或等效)与跨平台 API。

其他人提到了 Quartz,这是一个企业作业调度程序。它可以是轻量级的,具体取决于计划的作业,但它没有任何本质上面向桌面的功能。相反,它的许多功能都依赖于企业支持,例如关系数据库。如果您的应用程序主要是调度任务,一个无头 Quartz 服务执行作业,用桌面客户​​端与该服务进行交互是合理的做法。

于 2008-11-28T20:04:54.647 回答
0

Apache Directory Daemon项目听起来是最好的跨平台方式(在 POSIX 下使用 JSVC 的 Java 包装器,在 windows 下使用 procrun)。

于 2010-12-31T13:28:12.903 回答
0

人们有时很难找到 prunsrv.exe 和/或 prunmgr.exe(procrun 的组件),它在 apache 站点上没有很好的记录,通常可以在档案中找到(注意。他们说 procrun 是 tomcat5.exe)

对于 Windows,您可以在这里找到它:http: //archive.apache.org/dist/commons/daemon/binaries/windows/commons-daemon-1.0.7-bin-windows.zip(包含 32 位和 64 位版本)

您不需要实现守护程序接口,也不需要下载它,可以使用 prunsrv 将任何应用程序转换为 Windows 服务

浏览其他平台的存档

于 2011-08-15T10:04:12.570 回答