我想在我的 Java 桌面应用程序上生成警报:
- 设置了特定日期/时间的闹钟,可以是 5 分钟或 5 个月内
- 我需要能够在触发警报时创建 SWT 应用程序
- 我需要它能够在任何操作系统上工作。软件用户可能使用 Windows(其中 90%),其余使用 Mac OS(包括我)
- 软件许可必须允许我在商业程序中使用它,而不需要开源(因此,没有 GPL)
- 我不能要求用户安装 Cygwin,因此实现需要原生于 Windows 和 Unix
我正在使用 Java、Eclipse、SWT 进行开发,我的应用程序是使用 Java Web Start 从我的服务器部署的。我正在使用 Mac OS X.6 进行开发。
我想我有几个选择:
- 在启动时运行我的应用程序,并自己处理所有事情;
- 使用系统服务。
- 在 Unix 上使用 cron 表,在 Windows 上使用计划任务
启动时运行
我不太喜欢这个解决方案,我希望有更优雅的东西。
引用:I would like to run my Java program on System Startup on Mac OS/Windows. How can I do this?
系统服务
如果我将它作为系统服务运行,我可以从中受益,因为操作系统将确保我的软件:
- 一直在运行
- 没有/不需要 GUI
- 失败重启
我研究了一些我可以使用的资源:
- run4j — CPL — 仅在 Windows 上运行,似乎是一个有效的候选者
- jsvc — Apache 2.0 — 仅限 Unix,似乎是一个有效的候选者
- Java Service Wrapper — 各种 — 我买不起付费许可证,免费的是 GPL。因此,我不想/不能使用这个
我在系统服务选项中的问题是:
- 还有其他选择吗?
我计划的实现是否正确:
- 在应用程序启动时,检查服务是否存在
- 如果没有安装:
- 升级用户安装服务(Unix 为 root,Windows 为 UAC)
- 如果主机操作系统是Windows,使用run4j注册服务
- 如果主机操作系统是Unix,使用jsvc注册服务
- 如果没有运行,启动它
因此,在第一次运行时,应用程序将安装服务并启动它。当应用程序关闭时,服务仍在运行并且不再需要该应用程序,除非它未注册。
但是,我想我仍然怀念“启动时运行”功能。
我说的对吗?我错过了什么吗?
cron/任务计划程序
在 Unix 上,我可以轻松地使用 cron 表,而无需应用程序将用户升级为 root。我不需要处理重启、系统日期更改等。看起来不错。
在 Windows 上,我可以使用 Task Scheduler , 即使在命令行中使用 At或 SchTasks .这看起来不错,但我需要它兼容从 XP 到 7,我不能轻易测试它。
那你会怎么做呢?我错过了什么?您有什么建议可以帮助我选择最佳和最优雅的解决方案吗?
最佳答案
Bicou:很高兴您分享了您的解决方案!
请注意“schtasks.exe”有一些本地化问题,如果你想用它创建每日触发器,在英语 Windows 上你必须使用“daily”,在德语 Windows 上(例如)你必须改用“täglich”。
为了解决这个问题,我使用 /xml
选项实现了对 schtasks.exe
的调用,提供了一个我通过模板创建的临时 xml 文件。
创建此类模板的最简单方法是“手动”创建任务并使用任务管理 GUI 工具中的“导出”功能。
关于java - 无论操作系统如何,用 Java 执行计划任务的最佳解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11898647/