安排任务的 Cli java 应用程序,让 cmd/终端自由,并在预定的时间完成任务

问题描述

我正在尝试使用 spring 和 picocli 在 java 中执行 cli 应用程序,您可以在 cmd 上启动它,并使用对话框进行一些配置以对任务进行编程,(在这种情况下,在同一台上显示“警报消息” cmd。)我使用了 Timer 和 TimerTask 并且它可以工作,但是在应用程序执行此任务并完成之前,我无法在 cmd 上执行任何其他操作。

我想要的是配置任务,完成此配置对话框,能够使用命令行执行任何其他操作,并在指定的日期和时间在 cmd 上打印一条消息,或者每 XX 分钟打印一条循环消息。

我花了很多时间试图寻找解决方案,但可能这是不可能的...

我认为可能是一个很好的解决方案的其他选项是一种从 cmd 中的任何位置使用自定义命令(作为环境变量)并与在后台运行的应用程序持续交互的方法。这样,cmd 将只是在后台发送或接收此应用程序信息的一种通信方式。

但同样,我也没有找到任何方法来做到这一点。

有没有办法做到这两个选项中的任何一个,或者您有其他想法来完成这项任务?

提前致谢!

解决方法

我找到了解决这个问题的替代方案,但没有那么雄心勃勃。我把它留在这里以防有人遇到类似的问题。

它包括制作一个带有警报功能的小新程序,并通过参数发送计划任务的日期和时间,在计划时间,应用程序将发送带有警报的 jOptionpanel:

public class Alarm {

    public static void main(String[] args) {
        String alarmDate = args[0];
        String alarmTime = args[1];

        LocalDateTime taskTime = LocalDateTime.parse(alarmDate + "T" + alarmTime);
        Date taskTimeAsDate = Date.from(taskTime.atZone(ZoneId.systemDefault()).toInstant());

        Timer timer = new Timer();
        timer.schedule(setAlarm("Wake Up! Wake Up!"),taskTimeAsDate);  
    }

    private static TimerTask setAlarm(String message) {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                Component Jframe = null;
                JOptionPane.showMessageDialog(Jframe,message,"Alarm Ringing",JOptionPane.PLAIN_MESSAGE);
                System.exit(0);
            }
        };
        return timerTask;
    }
}

我使用 ProcessBuilder 从 cli 应用程序调用 jar:

    public void setAlarm(String alarmDate,String alarmTime) throws IOException {   
        ProcessBuilder timer = new ProcessBuilder("java","-jar","Alarm.jar",alarmDate,alarmTime);
        timer.start();
    }

这样闹钟就安排好了,cmd就免费了!如果有人有其他想法或解决方案,我真的很想知道!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...