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

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


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


Process p = Runtime.getRuntime().exec("calc.exe");

p.waitFor();

System.out.println("Process finished");

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


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


我尝试打开其他Windows 10默认程序,作为“explorer.exe”,有些程序按照它应该的方式工作,而其他程序则没有。


我对它的工作方式的想法是“explorer.exe”或“calc.exe”像某种启动器一样工作,所以当他们收到一个执行它们的进程时,他们创建自己的进程,我无法用Java控制程序。这完全是我的猜测。


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


提前致谢。


九州编程
浏览 292回答 1
1回答

吃鸡游戏

Process#waitFor()返回int值,它实际上errorlevel是进程的退出代码(即)。如果启动的进程返回非零errorlevel并且“正确”(即按预期)工作,否则您的代码会失败。您可以通过运行下面的批处理文件来检查它:@echo offcalc.exeREM explorer.exeecho Error level: %errorlevel%它会回报你的环境非零errorlevel输出的calc.exe和Explorer.exe的,并0为NOTEPAD.EXE。在我的环境(Windows 7)上,calc.exe也会返回0并且您的代码片段按预期工作。还请考虑到某些程序在成功的情况下可能会返回非零退出代码 - 这不是严格的。基于这一点以及第一个练习不应该太复杂的事实 - 假设您的代码片段就是答案。如果无论如何您仍然需要找到解决方案,您可以这样做(这里是批处理命令,而不是Java):运行calc.exe:calc.exe查找PID的的的calc.exe进程:tasklist /v /fo csv | findstr /i "calc.exe"通过运行该过程的无限检查PID与break;当处理不再被呈现,使用命令(假设例如PID = 1111):tasklist /fi "pid eq 1111"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java