在控制台应用程序上使用.readline()时出现间歇性结果



我有一个外部控制台应用程序,我试图读取。我的代码启动.exe进程。我正在使用一个缓冲阅读器,.getinputstream,然后。readline。然后将Line打印到控制台。我这样做有一些意想不到的结果。

  1. 启动进程后,我没有在任务管理器进程中看到它。我使用isAlive()来验证进程是否已经实际启动,它返回true。如果我在单独的java文件中运行该进程,则该进程将正确启动。我可以在任务管理器进程中看到。

2)当运行代码时,我得到断断续续的结果。大多数时候.println(Line)不打印任何东西(在eclipse中)。我在这段代码上看到过几次println工作,但是,它并不是一直工作。

我只用java写了大约两周,所以我对这些函数的工作原理的理解是补救的。我觉得这是。exe和我的代码之间的时间问题,或者我正在使用错误的目的,以及使一些事情比他们更难。如有任何帮助,我将不胜感激。

Windows 10, Eclipse IDE

public class P3Data {
public static void main(String[] args) throws IOException {
try {
//OutputStream r = P3d.getOutputStream();
//PrintStream ps = new PrintStream(r);

//System.out.println(ps.toString());

if (Ignition().isAlive() ) {
String alive = new String("Tagged is on");
System.out.println("the program "+alive);
}

String line;
BufferedReader input = new BufferedReader(new InputStreamReader(Ignition().getInputStream()));
{
while ((line = input.readLine()) != null) {
line = input.readLine();
//TimeUnit.SECONDS.sleep(1);
System.out.println(line);
//System.out.println("P3d running");
}           

input.close();
}

} catch (Exception e) {
e.printStackTrace();



}

System.out.println("Program ended");
}
public static Process Ignition() throws IOException{

String appname = new String("Consoledata.exe");
String Fname = new  String("C:\Users\..."+ appname);

String command[] = {Fname};  

ProcessBuilder Prep =new ProcessBuilder(command);

Process P3d = Prep.start();
return P3d ;

}
}

解决方案是删除额外的"。readline"。代码在第二个.readline上写了一个0长度的字符串,这让我相信我没有得到数据。这个论坛给我提供了解决方案。

https://www.javaprogrammingforums.com/file-i-o-other-i-o-streams/43884-using-external-exe-input-stream.html post172381

相关内容

最新更新