gpt4 book ai didi

java - 在 Java 中使用命令提示符

转载 作者:行者123 更新时间:2023-11-29 02:58:31 25 4
gpt4 key购买 nike

我在 Windows 7 机器上工作。

我正在开发一个应用程序,它是 Haskell 的 GHCi 解释器的前端。用户将输入一个命令,然后 Java 将在运行时通过 exec() 方法执行该命令,然后应用程序将显示用户刚刚使用命令提示符运行 GHCi 时会显示的文本。

现在,我在打印输出的循环中遇到了问题。

这是我现在拥有的代码。

public class GHCiTest {
public static Scanner rd, sc;

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

try {

System.out.println("Starting... ");

Process p = Runtime.getRuntime().exec("ghci");

PrintStream hugsin = new PrintStream(p.getOutputStream());
InputStream hugsout = p.getInputStream();

sc = new Scanner(hugsout);
rd = new Scanner(System.in);

String rdnextline;



while (true){
while (sc.hasNextLine()){
System.out.println(sc.nextLine());

}
System.out.println("yay");
rdnextline = rd.nextLine();
if (rdnextline == "quit"){break;}
hugsin.println(rdnextline);
hugsin.flush();

}
System.out.println(" ... successful completion.");
}
catch(IOException e) {
e.printStackTrace();
}
}

}

我知道 GHCi 的初始启动是有效的,因为该程序正在打印“GHCi,版本 7.10.3:http://www.haskell.org/ghc/ :? 寻求帮助”。但是,问题似乎是 while(sc.hasNextLine()) 循环,它应该读取命令提示符的输出并将其输出直到没有任何剩余,因为它不会跳出循环并继续读取用户输入。我知道这是因为程序没有打印我在循环后放入的“yay”标志。

最佳答案

像这样在另一个线程中接收 ghci 的输出。

System.out.println("Starting... ");

Process p = Runtime.getRuntime().exec("ghci");

PrintStream hugsin = new PrintStream(p.getOutputStream());
InputStream hugsout = p.getInputStream();
Scanner rd = new Scanner(System.in);
new Thread(() -> {
try (Reader r = new InputStreamReader(hugsout)) {
int ch;
while ((ch = r.read()) != -1)
System.out.print((char)ch);
} catch (IOException e ) {}
}).start();
Scanner sc = new Scanner(hugsout);
String rdnextline;
while (true) {
rdnextline = rd.nextLine();
hugsin.println(rdnextline);
hugsin.flush();
if (rdnextline.equals("quit")) {
break;
}
}
System.out.println(" ... successful completion.");

关于java - 在 Java 中使用命令提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685367/

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