我正在寻找让我的桌面 java 程序在大多数平台(Windows、Mac OS、Linux [尤其是 Ubuntu])上在后台运行的最佳方法(守护进程/服务?)。
通过“最佳方式”,我希望找到一种方法:
- 需要最少数量的特定于平台的代码。
- 不要求用户做任何普通计算机用户不能/不会做的事情
- 不要成为资源狂。
我知道我的要求可能不切实际,但我希望这种情况有某种“最佳实践”。
如何前进?
我正在寻找让我的桌面 java 程序在大多数平台(Windows、Mac OS、Linux [尤其是 Ubuntu])上在后台运行的最佳方法(守护进程/服务?)。
通过“最佳方式”,我希望找到一种方法:
我知道我的要求可能不切实际,但我希望这种情况有某种“最佳实践”。
如何前进?
您可以使用Apache Commons 守护程序代码将 Java 应用程序作为服务 (Windows) 或守护程序 (Linux) 运行。
守护进程由两部分组成。一种是用 C 编写的,用于与操作系统建立接口,另一种是用 Java 编写的,提供 Daemon API。
支持 Win32 和类 UNIX 平台。对于 Win32 平台,请使用 procrun。对于类 UNIX 平台,请使用 jsvc。
您必须编写一个实现以下方法的类(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()
您可以使用Java Service Wrapper将任何 Java 程序转换为服务/守护程序。它被多个 OSS 项目使用,并作为 Nexus Maven 存储库管理器的一部分提供,以便可以作为开箱即用的服务安装。要使用它,您,作者,只需要创建一个配置文件,然后运行一个简单的批处理文件来在 Windows 上创建服务或将一个 init 脚本复制到 Linux 上的正确运行级别。
您可以使用 SystemTray类并将您的应用程序安装为默认平台中的任何其他应用程序。
对于 Windows,它可能是在启动时运行的计划任务。对于 Linux 和 OSX,我不知道(除了 crontab 有点太技术性了),但我很确定他们都有办法轻松地做同样的事情。
不幸的是(截至今天)Apple 还没有完成 1.6 端口。
它不会是真正的恶魔,而是像 Google 桌面这样的应用程序。
我听说石英是一个不错的选择。但我从未使用过它。
如果您不需要免费的解决方案,您可以使用 Advanced Installer (www.advancedinstaller.com),它可以从您的 JAR 中制作 win-service 以及 MacOS 安装程序等等。
查看JDIC, Java 桌面集成组件项目。它支持桌面集成,如系统托盘(或等效)与跨平台 API。
其他人提到了 Quartz,这是一个企业作业调度程序。它可以是轻量级的,具体取决于计划的作业,但它没有任何本质上面向桌面的功能。相反,它的许多功能都依赖于企业支持,例如关系数据库。如果您的应用程序主要是调度任务,一个无头 Quartz 服务执行作业,用桌面客户端与该服务进行交互是合理的做法。
Apache Directory Daemon项目听起来是最好的跨平台方式(在 POSIX 下使用 JSVC 的 Java 包装器,在 windows 下使用 procrun)。
人们有时很难找到 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 位版本)
浏览其他平台的存档