微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用另一个 jar 检查我的 jar 是否仍在 Windows 10 中运行?

如何解决如何使用另一个 jar 检查我的 jar 是否仍在 Windows 10 中运行?

我是一名业余程序员。所以如果我下面的问题很愚蠢,那么我已经在这里道歉了。

我创建了一个 Java 例程,用于将来自传感器的数据记录到文本文件中。 jar 从自动启动开始,应该 24/7 全天候运行。为了不在 Windows 10 的任务栏上显示它,我已将其发送到托盘。到现在为止还挺好。 但是,大约每周一两次,应用程序崩溃并且我的日志读数的时间线被中断。为了调试,我创建了一个日志文件,jar 应该将所有错误发送到该文件。但是那里也没有相关的条目可以解释崩溃。为了帮助自己,我创建了一个这样的循环批处理作业:

:开始
"C:\Program Files (x86)\Java\jre1.8.0_281\bin\java" -jar D:\...\MyApp.jar
开始

那批工作正常。但是现在我的任务栏上一直都有那个批处理作业。 我想是否有可能编写另一个 jar(我可以像我的主应用程序一样将其放入我的系统托盘中)作为守护进程,每隔几分钟检查一次 MyApp 是否仍然处于活动状态,并在需要时重新启动它。>

为了解决这样的问题,我通常在网上冲浪并尝试找到一些代码片段来做我想要的事情并为我调整它。但是,我还找不到任何可以检测 MyApp 进程在 Windows 10 中是否仍处于活动状态的 Java 代码。 从 Win taskmanager 获取任务列表是行不通的,因为我有几个小 jars 在后台运行,当我打开 taskmanager 时,我只看到通用的“运行时代理”条目,没有 jar 名称

也许我在寻找错误的关键词。有人可以帮助我或将我推向正确的方向吗?

解决方法

经过一番搜索,我找到了以下解决方案:

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 会话终止)重新启动它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。