首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java进程上调用Windows10计算器?

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

Stack Overflow用户
提问于 2018-09-20 06:58:55
回答 1查看 481关注 0票数 1

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

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

代码语言:javascript
复制
Process p = Runtime.getRuntime().exec("calc.exe");
p.waitFor();
System.out.println("Process finished");

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

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

我试着打开其他Windows10的默认程序,比如"explorer.exe“,有些程序可以正常工作,有些则不行。

我的想法是,"explorer.exe“或"calc.exe”的工作方式就像某种启动器,所以当它们收到执行它们的进程时,它们会创建自己的进程,而我不能用程序来控制这些进程。这是我做的完全的推测

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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-20 10:28:38

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

当启动的进程返回非零的errorlevel时,你的代码会失败,否则你的代码会“正确”地工作(如预期的那样)。您可以通过运行下面的批处理文件进行查看:

代码语言:javascript
复制
@echo off
calc.exe
REM explorer.exe
echo Error level: %errorlevel%

它将在您的环境中返回用于calc.exeexplorer.exe的非零errorlevel输出,以及用于notepad.exe.的0输出

在我的环境(Windows7)上,calc.exe也会返回0,并且您的代码片段可以正常工作。

此外,请考虑到一些程序在成功的情况下可能会返回非零退出代码-这不是什么严格的东西。

基于这一点和第一个练习不应该太复杂的事实-假设您的代码片段就是答案。

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

  • 运行calc.exe进程的PID:

当进程不再存在时,使用break;通过PID对进程进行tasklist /v /fo csv | findstr /i "calc.exe"

  • Run无限检查,例如使用命令(假设为PID = 1111):

tasklist /fi "pid eq 1111"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52415238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档