我正在为我的公司制作一个核心服务器管理系统,服务器管理器和服务器本身都是 Java jar 文件。我需要做的是从服务器管理器启动服务器,并且服务器需要能够读取控制台输入。但是,按照我目前的编码方式,它会忽略控制台输入。我相信 while 循环正在卡住线程,但不知道该怎么办。有什么想法吗?
Process process = Runtime.getRuntime().exec("sh start.sh");
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while((line = reader.readLine()) != null){
System.out.println(line);
}
最佳答案
从技术上讲,您的 while 循环不会卡住线程 - 对 reader.readLine() 的调用会卡住线程。我建议您同时监听 InputStream
和 ErrorStream
,并且要同时执行这两个操作,您需要使用 Threads
或 java蔚来。对于Thread
ed解决方案,我构建并使用了 DataFetcher专门用于此类目的。您需要做的就是围绕 InputStream
创建一个 DataFetcher
,添加一个 FetcherListener
,然后启动 DataFetcher
一个新的线程
关于Java多线程进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512671/