2013-06-20 45 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命令提示符的提示时,为什么我们不能读取它呢? –