我正在寻找运行在后台的Java桌面程序的最佳方式(守护进程/服务?),并能够在多个平台(特别是Windows、Mac OS和Linux [Ubuntu])上运行。
所谓“最佳方式”,我希望能够达到以下目标:
- 需要最少量的平台特定代码。
- 不要求用户进行任何一般计算机用户无法或不会完成的操作。
- 不会占用过多系统资源。
我理解我的要求可能有些不切实际,但我希望有某种“最佳实践”适用于这种情况。
如何继续前进?
我正在寻找运行在后台的Java桌面程序的最佳方式(守护进程/服务?),并能够在多个平台(特别是Windows、Mac OS和Linux [Ubuntu])上运行。
所谓“最佳方式”,我希望能够达到以下目标:
我理解我的要求可能有些不切实际,但我希望有某种“最佳实践”适用于这种情况。
如何继续前进?
你可以使用Apache Commons daemon代码在Windows上作为服务或在Linux上作为守护进程来运行Java应用程序。
守护进程由两部分组成。一部分用C语言编写,用于与操作系统交互;另一部分用Java语言编写,提供了守护进程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()
Apache Directory Daemon 项目听起来是实现跨平台的最佳方式(Java 包装器在 POSIX 上使用 JSVC,在 Windows 下使用 procrun)。
请查看JDIC,Java桌面集成组件项目。它支持桌面集成,例如使用跨平台API的系统托盘(或等效物)。
其他人提到了Quartz,这是一个企业作业调度程序。它可以轻量级,具体取决于所安排的作业,但它没有任何本质上面向桌面的功能。相反,它的许多功能都依赖于企业支持,例如关系数据库。如果您的应用程序主要是调度任务,则使用无头Quartz服务执行作业,并使用桌面客户端与服务交互是合理的方法。
有时候人们很难找到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位版本)
浏览该存档以获取其他平台的信息