gpt4 book ai didi

java - 如何从 Java 读取命令行输出(通过 Runtime.getRuntime().exec(...))

转载 作者:行者123 更新时间:2023-12-01 16:01:34 25 4
gpt4 key购买 nike

我试图在 Swing 应用程序中提供一些有关符号链接(symbolic link)存在的信息。GUI 有一个JTextArea resultTextArea和一个 JTextField statusField 。这是 Dialog 类中的代码:

public void checkForSymLinks(File... dirs) {
for (File dir : dirs) {
try {
Process p = Runtime.getRuntime().exec("find -type l", null, dir);
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
resultTextArea.append(line);
}
} catch (IOException ex) {
Logger.getLogger(SymbolicLinkSearchResultDialog.class.getName()).log(Level.SEVERE, null, ex);
}
}
statusField.setText("SymLinks found! // FIXME");
}

我尝试并替换了 Process p = Runtime.getRuntime().exec("find -type l", null, dir);作者:

ProcessBuilder pb = new ProcessBuilder("find -type l");
pb.directory(dir).redirectErrorStream(true);
Process p = pb.start();

但这并没有帮助。

问题是它不知何故都没有向 resultTextArea 写入任何内容。也没有到达最后一行中设置 statusField 的代码。尽管 GUI 保持响应,但它似乎卡在某个地方。

关闭对话框后,我得到以下堆栈跟踪:

java.io.IOException: Cannot run program "find -type l" (in directory "/home/johndoe/Desktop/test"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1024)

我已经尝试过/usr/bin/find type -l还有很多其他的事情...你知道我做错了什么吗?

PS:操作系统为Linux。

奇怪的事情:

def symLinkCheck(dirs: Array[File]) = {                              
dirs.foreach{ dir =>
val p = Runtime.getRuntime().exec("find -type l", null, dir)
val in = new BufferedReader(new InputStreamReader(p.getInputStream))
var line: String = null
while({line = in.readLine; line} != null){
println(line)
}
}
}

我在 Scala 中尝试了这段代码,它运行没有问题。我不太确定我的问题是否与 Swing 有关?

编辑:问题肯定与 Swing 有关。

如果我在theGUI.setVisible(true)之前调用该方法它可以工作,但之后就不行了。

我已经尝试过SingUtilities.invokeLater但这没有帮助。

最佳答案

您没有说明您正在使用哪个操作系统。假设您的 find 命令语法正确(在 Mac OSX 上不正确),我认为您应该:

  1. 同时使用 stdout 和 stderr。您需要同时执行此操作以避免阻塞行为。请参阅this SO answer了解更多详情
  2. 通过Process.waitFor()从生成的进程收集退出代码

关于java - 如何从 Java 读取命令行输出(通过 Runtime.getRuntime().exec(...)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3742260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com