我是个业余程序员。所以如果我下面的问题是愚蠢的,那么我已经同意了。
我已经创建了一个java例程来记录从传感器到文本文件的数据。这个罐子从自动启动开始,应该24/7运行。为了不让它出现在windows 10中的任务栏上,我已经将它发送到托盘中。到目前一切尚好。然而,大约每周一次或两次,应用程序崩溃,我的日志读数的时间线被打断。为了进行调试,我创建了一个日志文件,jar应该将所有错误发送到该日志文件。但也没有相关的条目可以解释这次坠机事件。为了帮助自己,我创建了一个循环的批处理作业,如下所示:
:开始
“C:\程序文件(x86)\Java\jre1.8.0_281\bin\java”-jar D:...\MyApp.jar
启程
那批货很好用。但现在我的任务条上一直都有批次作业。我想,如果可以再写一个jar (我可以像我的主要应用程序那样放到我的系统托盘中)作为一个守护进程,每隔几分钟检查一次MyApp是否仍然处于活动状态,并在需要时重新启动它。
为了解决这个问题,我通常在网上冲浪,并试图找到一些代码片段来做我想做的事情,并为我修改它。但是,我还找不到任何java代码来检测MyApp进程在Windows 10中是否仍然处于活动状态。从Win taskmanager获取任务列表将无法完成,因为我在后台运行了几个小jar,当我打开任务管理器时,我只看到一般的“运行时代理”条目,而没有jar名称。
也许我找错关键词了。有人能帮我还是把我推向正确的方向?
发布于 2021-05-18 06:19:36
在搜索了一下之后,我找到了以下解决方案:
public static void startExtJarProgram(){
String extJar = "MyApp.jar";
//ProcessBuilder processBuilder = new ProcessBuilder(extJar);
try {
File f = new File("ClewareMonitorLog.txt");
ProcessBuilder processBuilder = new ProcessBuilder("java", "-jar", extJar);
processBuilder.redirectError(f);
Process process = processBuilder.start();
//Process process = Runtime.getRuntime().exec(extJar);
while (true) {
String timeStamp = new SimpleDateFormat("dd.MM.yyyy HH:mm").format(new Date());
JOptionPane.showMessageDialog(null, timeStamp + " - MyApp started.");
try {
final int exitStatus = process.waitFor();
process = processBuilder.start();
} catch (InterruptedException ex) {
System.out.println("InterruptedException: "+ex.getMessage());
}
} 这一职能是一个监护过程。它启动MyApp.jar,然后等待它的返回(这只在主应用程序终止时发生)。然后,它检查应用程序是否因错误而终止,如果没有,(=有人意外地关闭了它或java会话终止了)重新启动它。
https://stackoverflow.com/questions/67567261
复制相似问题