我正在为Windows命令行上运行的可执行文件创建包装器。该可执行文件需要执行一些命令,然后尝试连接到另一台设备。然后它输出并报错!或准备好“设备名称”,直到应用程序退出,我才收到此消息。问题是此应用程序是一个隧道,允许我在外部设备上运行telnet,但我需要确保设备已准备就绪,这是我的代码。
public void startUDPTunnel() {
//TODO Pull Amino serial number from webportal
Properties prop = new Properties();
InputStream inConfig = getClass().getClassLoader().getResourceAsStream("config.properties");
try {
prop.load(inConfig);
} catch (IOException e) {
System.out.println(e.getMessage());
}
String server = prop.getProperty("server");//config.GetProp("server");
System.out.println(server);
String port = prop.getProperty("port");//config.GetProp("port");
System.out.println(port);
String location = prop.getProperty("location");//config.GetProp("location");
System.out.println(location);
String url = prop.getProperty("URL");
System.out.println(url);
String input = "";
try {
input = getSerial(url);
System.out.println(input);
Process p = Runtime.getRuntime().exec(location+"udptunnel.exe -c 127.0.0.1 23 "+input+" "+server+" "+port+" 127.0.0.1 23");
threadSleep();
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
if(line.equals("ERROR!")){
System.out.println("There was an ERROR");
}
if(line.equals("Ready for \""+input+"\"")){
System.out.println("Load Telnet");
}
}
p.destroy();
} catch (IOException e) {
e.printStackTrace();
}
}
抱歉,此函数中还有很多调试代码。
编辑
好的,我很确定知道问题出在哪里bufferReader.readLine()需要\ n或\ r或只是挂起,无论如何都可以在没有缓冲区的情况下观看流?
您应该使用ProcessBuilder
,然后使用redirectErrorStream()
。我认为这将导致stdout
进程无法缓冲。即使不是,您也只需阅读一个InputStream
即可获得stdout
和stderr
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句