在Java进程上调用Windows10计算器?

时间:2018-09-19 22:58:55

标签: java windows process

我是一名刚开始学习基于Java的多线程编程的学生。

作为我的第一个练习,我被告知要创建一个执行Windows计算器的进程,然后等待该进程完成,然后发送一条消息。这是我所做的代码的一部分。

HTTP/1.1 301 Moved Permanently

当我执行它时,Windows 10计算器会打开,然后我收到“处理完成” 消息。我不知道为什么在进程仍在运行时收到消息,因为计算器已打开,所以我尝试运行完全相同的代码,但使用“ notepad.exe” 作为命令执行。

这次执行的结果是预期的:直到关闭记事本,我才收到消息。

我尝试打开其他 Windows 10 默认程序,如“ explorer.exe” ,其中一些以应有的方式工作,而另一些则没有。

我对它的工作方式的看法“ explorer.exe” “ calc.exe” 就像某种启动器一样工作,因此当他们收到执行它们的流程时,他们会创建自己的流程,而Java程序无法控制这些流程。那是我做出的完全猜测

实际问题是:为什么会这样? Windows 10计算器和其他程序在进程方面如何工作?

谢谢。

1 个答案:

答案 0 :(得分:0)

Process#waitFor()返回int值,它实际上是该进程的退出代码(即errorlevel)。

在启动的进程返回非零errorlevel的情况下,您的代码会失败,否则会“正确”运行(即按预期)。您可以通过运行以下批处理文件进行检查:

@echo off
calc.exe
REM explorer.exe
echo Error level: %errorlevel%

它将在您的环境中为 calc.exe explorer.exe 返回非零errorlevel输出,为返回0 > notepad.exe

在我的环境( Windows 7 )上, calc.exe 也返回0,并且您的代码段按预期工作。

还请考虑到某些程序在成功的情况下可能会返回非零退出代码-这不是严格的要求。


基于此,以及第一个练习不应太复杂的事实-假设您的代码段就是答案。

如果仍然需要找到解决方案,则可以这样做(在此批处理命令,而不是 Java ):

  1. 运行 calc.exe

    calc.exe

  2. 找到 calc.exe 过程的 PID

    tasklist /v /fo csv | findstr /i "calc.exe"

  3. 当不再显示流程时,例如,通过 PID break;对流程进行无限检查。使用命令(假设PID = 1111):

    tasklist /fi "pid eq 1111"