Java 启动外部.exe并实时读取控制台中写入的内容

Java 启动外部.exe并实时读取控制台中写入的内容,java,external,Java,External,我一直在努力解决这个问题,我已经彻底搜索,以找出该怎么办。然而,我发现的结果(至少到目前为止)都不符合我的要求 事实上,我已经做了一个可执行的JAR。这个jar启动一个.EXE。 现在,问题是,EXE将一直运行,我想获取控制台中写入的内容,以便在读取后立即将其写入JTextBox 你介意给我举个例子吗?我想自己做,但我的脑袋似乎不知道怎么做 多谢各位 编辑:我正在尝试做的是一个游戏服务器的GUI 编辑2:对于那些说它重复的人。。。但愿是。。。尝试了其他人解释的方法,但没有成功,所以这就是我在这里

我一直在努力解决这个问题,我已经彻底搜索,以找出该怎么办。然而,我发现的结果(至少到目前为止)都不符合我的要求

事实上,我已经做了一个可执行的JAR。这个jar启动一个.EXE。 现在,问题是,EXE将一直运行,我想获取控制台中写入的内容,以便在读取后立即将其写入JTextBox

你介意给我举个例子吗?我想自己做,但我的脑袋似乎不知道怎么做

多谢各位

编辑:我正在尝试做的是一个游戏服务器的GUI

编辑2:对于那些说它重复的人。。。但愿是。。。尝试了其他人解释的方法,但没有成功,所以这就是我在这里提问的原因

编辑3:因为我一直期待着找到问题所在,我会告诉你我所做的没有任何错误。但是,我想,这可能是因为服务器(用C++/C编写)可能无法以“正常”方式输出。这可能是原因吗?我希望如此。否则,我可能真的做错了什么


请注意,为了能够阅读,我使用了
InputStream
。。但是很好。

基本上,您需要从在某种后台线程中运行进程开始,这样就不会有阻塞事件调度线程的风险

然后您需要读取进程
InputStream
。在读取输入时,您需要将这些更新以这样的方式推送到UI,以免违反Swing的单线程规则。也就是说,您应该确保所有更新都是在事件调度线程的上下文中进行的

查看更多详细信息

在这方面,我建议使用类似于
SwingWorker
的东西。它允许您从后台线程监视进程,但具有易于使用的功能,可将更新同步回EDT


请看一个例子

看,或者也许。我已经试过第一个了。它不能“实时”工作,因为控制台无法读取。第二个不是我真正想要的。第三个似乎很好,但实际上不起作用。(虽然我试着按照评论上说的去做,但我会告诉你以后是否有效)。它需要编辑外部的EXE源代码,而我无法编辑。@fmbesteiro如果您声称这不是dup,请更具体地说明您已经厌倦了什么,以及为什么它不适合您。你有什么错误?编辑#3@Shai。请原谅,我是新来的。看了你的答案,决定修改如下:
code
ProcessBuilder pb=newProcessBuilder(“C:\\\Archivos de Programa\\MTA Scripting\\server\\MTA server.exe”)//pb.directory(新文件(“C:\\\\Archivos de Programa\\MTA Scripting\\server\\MTA server.exe”);
目录
参数simple为您提供了一种方法,您可以通过该方法更改进程的执行上下文,否则它将在当前进程工作目录中执行。如果我真的很糟糕,请原谅,事实是我正在尝试学习,以免打扰您。。。问题是我尝试了这个
code
ProcessBuilder pb=newprocessbuilder(“MTA Server.exe”);pb.directory(新文件(“C:\\\\Archivos de Programa\\MTA Scripting\\server”);它抛出IOException,表示文件无法执行在对该文件(创建外部jar文件并在该目录中执行)进行变通后,文本仅显示“开始…”。对其进行了测试,似乎对我来说效果良好。1-可执行文件是否真的输出了任何东西(并且不希望有任何输入)2-它启动失败了吗??