簡體   English   中英

Java命令提示符模擬器

[英]Java Command Prompt Emulator

我正在嘗試制作一個通過cmd.exe命令並輸出其輸出的Java程序。 為此,我使用以下代碼:

cmdLine = Runtime.getRuntime().exec("cmd.exe");
cmdLineOut = new BufferedReader(new InputStreamReader(cmdLine.getInputStream()));
cmdLineIn = new PrintWriter(cmdLine.getOutputStream());
// ...
cmdLineIn.println(command);
cmdLineIn.flush();
String s = null;
while ((s = cmdLineOut.readLine()) != null)
    System.out.println(s);

雖然,當給出輸入時,永遠不會打印輸出。

編輯:已解決當輸入為空時,cmdLineOut.readLine()不會返回null,它會凍結。 由於readLine在最后凍結,因此沒有其他代碼執行,因此我只將readLine的打印放在單獨的線程中。

如果有人想更好地回答這個問題,請繼續。

至少在發布的代碼段中,您從未真正執行過用戶的命令。 另外,幾乎所有命令提示符“命令”實際上只是默認程序搜索路徑上的程序。 您應該只為每個命令運行Runtime.getRuntime().exec(user_command) 這意味着您將必須像對待每個命令一樣設置輸入和輸出流。 您應該在單獨的線程中獲取輸入,因為嘗試讀取輸入將阻塞當前線程,直到實際有要讀取的輸入為止。 但是,即使在UNIX或Linux系統下,某些命令也是“內置的”(例如cd ),這意味着命令提示符(也稱為“ shell”)在內部處理命令。 您的程序必須測試用戶輸入以查看他們是否正在調用內置命令,並專門處理對內置命令的調用。 您的程序實際上應該可移植到非Windows計算機。 當然,用戶將使用不同的命令(用cp代替copy ),但是您唯一需要添加的部分就是處理其他OS外殼程序的內置列表(或者只是讓您的程序實現“平台”內置函數集-這是您的Shell程序,您可以制定規則)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM