我正在为公司创建一个核心服务器管理系统,服务器管理器和服务器本身都是Java jar文件。我需要做的是从服务器管理器启动服务器,并且服务器需要能够读取控制台输入。但是,按照我目前的编码方式,它会忽略控制台输入。我相信while循环会冻结线程,但IDK会如何处理。有任何想法吗?
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 NIO来同时进行两者。对于Thread
ed解决方案,我专门为此目的构建并使用了DataFetcher。您所需要做的就是在DataFetcher
周围创建一个InputStream
,添加一个FetcherListener
,然后DataFetcher
以一个新的开始Thread
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句