亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 進程上調用 Windows10 計算器?

在 Java 進程上調用 Windows10 計算器?

九州編程 2021-09-29 14:56:26
我是一個剛開始學習基于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 計算器和其他程序在進程方面如何工作?提前致謝。
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

Process#waitFor()返回int值,它實際上errorlevel是進程的退出代碼(即)。


如果啟動的進程返回非零errorlevel并且“正確”(即按預期)工作,否則您的代碼會失敗。您可以通過運行下面的批處理文件來檢查它:


@echo off

calc.exe

REM explorer.exe

echo Error level: %errorlevel%

它會回報你的環境非零errorlevel輸出的calc.exe和Explorer.exe的,并0為NOTEPAD.EXE。


在我的環境(Windows 7)上,calc.exe也會返回0并且您的代碼片段按預期工作。


還請考慮到某些程序在成功的情況下可能會返回非零退出代碼 - 這不是嚴格的。


基于這一點以及第一個練習不應該太復雜的事實 - 假設您的代碼片段就是答案。


如果無論如何您仍然需要找到解決方案,您可以這樣做(這里是批處理命令,而不是Java):

  1. 運行calc.exe

    calc.exe

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

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

  3. 通過運行該過程的無限檢查PIDbreak;當處理不再被呈現,使用命令(假設例如PID = 1111):

    tasklist /fi "pid eq 1111"


查看完整回答
反對 回復 2021-09-29
  • 1 回答
  • 0 關注
  • 312 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號