gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:10:29 25 4
gpt4 key购买 nike

我是一名刚开始学习基于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 计算器和其他程序在进程方面如何工作?

提前致谢。

最佳答案

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

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

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

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

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

另请注意,某些程序在成功的情况下可能会返回非零退出代码 - 这不是严格的。

<小时/>

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

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

  1. 运行calc.exe:

    calc.exe

  2. 查找calc.exe进程的PID:

    任务列表/v/fo csv | findstr/i“calc.exe”

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

    tasklist/fi“pid eq 1111”

关于java - 在Java进程上调用Windows10计算器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52415238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com