【发布时间】:2016-08-22 17:15:11
【问题描述】:
我正在编写的这个程序有这个方法,它应该执行一个程序但不做任何事情。有问题的方法如下:
public void findCC_Data(List<String> l7) {
StringBuffer output = new StringBuffer();
Process p;
try {
for(String sql_file: l7) {
String command = "cleartool describe " + sql_file;
p = Runtime.getRuntime().exec(command);
System.out.println("Executing: " + command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine()) != null) {
output.append(line + "\n");
}
if (reader.readLine() == null) {
System.out.println("'reader.readLine()' is equal to null");
}
}
} catch(Exception e) {
e.printStackTrace();
}
System.out.println(output.toString());
}
有谁知道为什么这个命令什么都不做而reader.readLine()方法总是返回null?
我正在学习一个教程,但基本上使用的是 cleartool 程序而不是 ping 程序。教程在这个网址:https://www.mkyong.com/java/how-to-execute-shell-command-from-java/
解决方案
我在 for 循环之外而不是在循环内部有 System.out.println(output.toString()) print 语句。现在,当我在循环内移动 SOP 语句时,它会打印一百万多行关于 ClearCase 版本控制内容的信息。要修复,请将带有 output.toString() 的 SOP 放入上述损坏代码的循环中。
【问题讨论】:
-
您运行的是哪个版本的 ClearCase?在客户端的哪个操作系统上?在服务器端?您是否在动态视图中运行您的 Java 程序?
-
p 为空。我想你想将 Runtime.getRuntime().exec(command) 的返回类型分配给 p.
-
@omkarsirra 感谢您指出这一点。我忘记在代码中重新添加该分配,但刚刚做了。无论哪种方式都没有返回任何内容......我删除了对“p”的分配,因为它没有做任何事情,而是继续并将其添加回来,以便somone可以帮助调试它。我从这里得到这个成语:mkyong.com/java/how-to-execute-shell-command-from-java
-
@VonC 我不确定 ClearCase 的版本。我在客户端运行 Windows,但我不知道操作系统 ClearCase 正在为服务器运行。
-
@user3870315
cleartool -ver或cleartool -verall应该告诉你版本。但是您是否处于动态视图中?