2013-06-20 80 views
1

我最近試圖製作一個Swing GUI來發送和接收來自第三方命令行program的命令。我使用了與命令提示符相同的過程,即ProcessBuilder類來執行,然後使用BufferedReader讀取程序的響應。我可以肯定地再次提到它,我至少可以從Windows命令提示符下讀取一些響應(有時我需要使用掃描器)。當我用this命令行程序一樣,如何與第三方命令行程序提示不同的Windows命令提示符進行交互?

  1. 它沒有露面

  2. 它沒有要麼BufferedReader中或掃描儀響應。

    我搜索了互聯網,發現一個單調的答覆,它對它們執行相同的過程都是不一樣的,因爲它們不是同一件事情。到目前爲止,我還沒能完成我的項目,但如果我能瞭解他們之間的區別,他們的執行情況,他們的執行情況是否不一樣,我可以更安心一點,有什麼方法可以讓我們實際上把他們放在一起,我的問題可以解決?

+2

到目前爲止還沒有問題:「爲什麼程序不使用標準輸入或標準輸出」並不真正有用/可以回答。程序無法啓動的原因也有很多...首先要嘗試的是在命令提示符下輸入/輸出該程序的輸入/輸出以查看它是否確實讀取輸入... –

+0

@AlexeiLevenkov先生,我不知道沒有聲望投你的評論,但謝謝你,我自己覺得需要重新構建這個問題。 –

+0

@SukhmeetSingh乍看之下,我會說這個程序很可能會打開它自己的shell,而這個「原始」shell仍然保持沉默和不響應。請描述當您從shell手動執行程序時的行爲。 –

回答

1

最有可能的程序啓動自己的shell並不再與原來的shell進行交互。 (如果程序打開一個新窗口,你會注意到這一點)

或者程序需要某些特定的庫存在才能夠與shell進行交互(readline似乎是這裏的情況)並且不存在您的Java環境。

作爲一種快速入侵,您可以嘗試啓動bash(或cmd),然後啓動該工具。 bashcmdreadline庫。我沒有在這裏準備好Windows,但作爲一個猜測只是試圖調用你的程序,如cmd urjtag.exe而不是僅僅urjtag.exe這樣你開始一個cmd進程(與你可以交互),並且cmd開始urjtag.exe你已經知道它可以與之交互。

無論哪種方式,問題出在你想要調用的程序與shell交互的方式,你應該詢問程序的作者如何做以及如何連接它。

+0

先生,我認爲你是對的,因爲當我執行exe時,它會接管提示,儘管不是在不同的窗口中,但是它確實似乎已經開始了它自己的處理,然後,當然,沒有Windows命令就像dir/p會工作。我會很高興看到'bash',看看它是否可以幫助。我的名譽再次不允許我投票。 (PS:readline鏈接沒有頁面先生) –

+0

@SukhmeetSingh我修復了鏈接。 bash是一個linux/unix工具。我不確定它是否存在或在Windows上可用。 –

+0

@SukhmeetSingh我添加了關於'cmd'而不是'bash'的信息。看一看。 –

0

從UrJTAG文檔:

JTAG(IEEE 1149.1)是用於與 集成電路的測試裝置的串行接口。

UrJTAG是一個軟件包,其使得能夠與JTAG感知 (IEEE 1149.1)的硬件設備(部件)和電路板通過JTAG 適配器工作。

  1. 這不是命令提示符。
  2. 這並不意味着用作通用程序的命令提示符。

因此,正如其他單調的回答已經告訴你,它和Windows命令提示符是不是一回事,即使你似乎認爲他們是。它具有文檔中描述的非常具體的用例。

windows命令提示符是一個特殊的程序,它調用特定的可執行文件並以特定的方式將命令行參數傳遞給它們。

java.exe可執行文件旨在理解這種調用。

由於UrJTAG可執行文件不是一個通用的命令提示符,它不會執行Windows命令提示符所做的操作,因此不會像您想要的那樣運行Java程序。

+0

就我所瞭解的OP而言,他希望啓動特定JTAG庫的命令行界面。開始恰好來自java,他希望通過std-in和std-out與CLI進行交互。這是一個預期和支持的用例。 (不是一般的JTAG,而是這個庫) –

+0

合理的假設。我會等到OP提供一些清晰的內容,並刪除我的迴應,如果你說的話確認。 –

+0

@RajeshJAdvani先生我現在已經停止思考任何事情,並已成爲公正的,如果有幫助。我從來沒有說過它是一個命令提示符先生,儘管這無疑是一個命令行程序。我同意java.exe應該被設計爲與cmd進行交互,但是令我困惑的是,當軟件在同一窗口中接管來自Windows命令提示符的提示時,爲什麼我們不能讀取它呢? –

相關問題