我在java代码中调用一个位于jar文件中的类(使用java -classpath path / file.jar classname)。
我的问题是当命令genKOSCommand
无效时,对input.readLine()
的调用将阻止该程序。所以我添加了input.ready()
以避免阻止。当我调试程序时,没关系。似乎工作。但是当不在调试中运行时,缓冲区永远不会准备好。
// Execute a command with an argument that contains a space
String[] genKOSCommand = new String[] {
"java",
"-classpath",
Config.XDSI_TEST_KIT_HOME + "/xdsitest/lib/xdsitest.jar;"
+ Config.XDSI_TEST_KIT_HOME + "/xdsitest/classes",
"ca.etsmtl.ihe.xdsitest.docsource.SimplePublisher", "-k",
"C:/Softmedical/Viewer_Test/xdsi-testkit-2.0.4/xdsihome/usr/data/image14.dcm" };
Process child = Runtime.getRuntime().exec(genKOSCommand);
BufferedReader input = new BufferedReader(new InputStreamReader(
child.getInputStream()), 13107200);
String line = null;
if (input.ready()) {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
try {
child.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
关于如何检测已执行命令的问题的任何建议?
谢谢。
答案 0 :(得分:-2)
您需要在循环中等待BufferedReader准备就绪。
while (input.ready() == false) { /* intentional empty space here */ }
while ((line = input.readLine()) != null) {
System.out.println(line);
}
/* rest of code follows */