我需要在Java应用程序中启动1-3个外部程序,这些程序具有用户定义的路径。我有几个要求:
如果程序已经在运行,我不希望其执行
我不希望任何程序从我的Java应用程序中夺走焦点
我不在乎其中任何一个是否无法启动。他们只需要默默地失败。
到目前为止,这是我想出的:
ProcessBuilder pb = new ProcessBuilder(userDefinedPath1);
try {
pb.start();
}
catch (Exception e) {
// Something went wrong, just ignore
}
然后我再用其他两条路径重复3次。就像我期望的那样开始,并满足了我的第三个要求,但是在前两个条件上却失败了。
做这个的最好方式是什么?
编辑:
我对这些其他应用没有任何控制权。他们是第三方。同样,它们可能已由用户随时手动启动或停止。
我知道可执行文件的 确切 名称(例如“ blah.exe”),它们将 始终 相同,但是可执行文件的路径不一定相同。
批处理文件包装器在这里不可行。
其他应用 不是 Java应用,只是普通的Windows可执行文件。
我猜您对其他两个应用程序没有控制权…如果您做到了,那还不算太糟-您可以让他们听一个套接字,看看来时套接字是否可用向上。
下一个解决方案实际上可能与语言无关。您可以通过批处理文件包装程序管理整个系统。编写一个批处理文件,该文件在启动时会创建一个文件,在停止时会删除它。Unix系统大量使用此技术-
他们经常将文件称为锁定文件。
如果只有您的应用程序会启动这些其他应用程序,那么您可以简单地跟踪是否已启动它,所以我猜测这是不可能的,或者您不会问,所以我假设用户可能通过其他机制启动了这些程序。
如果您无法控制其他应用程序的启动,甚至无法编写批处理文件来启动它们,那么您就无法做您想做的事情(请注意,这些应用程序必须始终使用该批处理文件,即使用户手动启动它们也是如此。
我要做的最后一项工作可能是获取进程状态并对其进行解析,但是您必须确切地知道PS中其他应用程序的调用方式,这并不是一件容易的事。同样,所有的Java应用程序在大多数进程状态打印输出中倾向于具有相同的准确签名,这可能使它无用。
问题是,如果这些程序之一是在应用程序外部启动的,则除非您碰巧知道它是确切的过程状态签名,而且甚至是不稳定的,否则您几乎无法识别该事实。
问题内容: 因此,我试图将cron作业设置为我创建的守护程序的一种看门狗。如果守护程序出错并失败,我希望cron作业定期重新启动它…我不确定这样做的可能性如何,但是我通读了一些cron教程,找不到任何可以做我的事情正在寻找… 我的守护程序是从Shell脚本开始的,所以我真的只是在寻找一种方法来运行cron作业,前提是该作业的先前运行仍未运行。 它确实为我试图使用锁定文件提供了解决方案,但我不确定是
苏,希望你们都没事。出于某种原因,在我的java代码中,当我按下一个键(当它工作时),我的ActionListener要求我保持计时器启动,否则会绘制一个矩形并显示JLabel simple的条件不会运行,因为ActionListener无法调用它。 这是工作代码。 下面是使actionEvent不执行的原因
问题内容: 我有一个包含Java应用程序的JAR文件。如何使它从Windows开始而不需要用户交互? 问题答案: 创建一个.bat文件,并将其放入其中: 然后将.bat文件放入Windows启动文件夹。 还有一件事:使用java和javaw之间是有区别的。虽然在调试应用程序时使用Java更好,但应用程序会打印文本或类似内容,而在不需要时,javaw则更好。为什么?因为java使用控制台显示所有应用
我有一个包含Java应用程序的JAR文件。如何在不需要用户交互的情况下从Windows开始?
问题内容: 我已经尝试按照以下教程和文档进行有关如何对Web服务器进行docker化的操作,但是我无法通过docker run命令使该服务运行。 这是我的Dockerfile: 我创建我的图像: 当我运行它时: 它似乎只是停止: 我希望它与端口81-> 80一起运行,但事实并非如此。跑步 似乎什么也没做。 我也尝试过直接输入 从这里我可以开始服务 从另一个标签中,我可以看到它正在按预期方式工作(也
我使用的是Appium版本1.4.16.1、Selenium 2.53.0和java客户端2.1.0 我得到以下错误:- “org.openqa.selenium.WebDriverException:尚未实施。请帮助我们:http://appium.io/get-involved.html (警告:服务器未提供任何stacktrace信息)命令持续时间或超时:7毫秒生成信息:版本:“2.53.0