我正在尝试使用 spring 和 picocli 在 java 中执行 cli 应用程序,您可以在 cmd 上启动它,并使用对话框进行一些配置以对任务进行编程,(在这种情况下,在同一台上显示“警报消息” cmd。)我使用了 Timer 和 TimerTask 并且它可以工作,但是在应用程序执行此任务并完成之前,我无法在 cmd 上执行任何其他操作。
我想要的是配置任务,完成此配置对话框,能够使用命令行执行任何其他操作,并在指定的日期和时间在 cmd 上打印一条消息,或者每 XX 分钟打印一条循环消息。< /p>
我花了很多时间试图寻找解决方案,但可能这是不可能的...
我认为可能是一个很好的解决方案的其他选项是一种从 cmd 中的任何位置使用自定义命令(作为环境变量)并与在后台运行的应用程序持续交互的方法。这样,cmd 将只是在后台发送或接收此应用程序信息的一种通信方式。
但同样,我也没有找到任何方法来做到这一点。
有没有办法做到这两个选项中的任何一个,或者您有其他想法来完成这项任务?
提前致谢!
答案 0 :(得分:1)
我找到了解决这个问题的替代方案,但没有那么雄心勃勃。我把它留在这里以防有人遇到类似的问题。
它包括制作一个带有警报功能的小新程序,并通过参数发送计划任务的日期和时间,在计划时间,应用程序将发送带有警报的 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就免费了!如果有人有其他想法或解决方案,我真的很想知道!