Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程进程_Java_Multithreading_Input_Process - Fatal编程技术网

Java多线程进程

Java多线程进程,java,multithreading,input,process,Java,Multithreading,Input,Process,我正在为我的公司制作一个核心服务器管理系统,服务器管理器和服务器本身都是JavaJAR文件。我需要做的是从服务器管理器启动服务器,服务器需要能够读取控制台输入。然而,按照我目前的编码方式,它忽略了控制台输入。我相信while循环正在冻结线程,但是IDK知道如何处理它。有什么想法吗 Process process = Runtime.getRuntime().exec("sh start.sh"); BufferedReader reader = new BufferedReader(new In

我正在为我的公司制作一个核心服务器管理系统,服务器管理器和服务器本身都是JavaJAR文件。我需要做的是从服务器管理器启动服务器,服务器需要能够读取控制台输入。然而,按照我目前的编码方式,它忽略了控制台输入。我相信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,要同时听这两个命令,您需要使用线程或JavaNIO。对于线程化解决方案,我专门为这种目的构建和使用。您需要做的就是围绕InputStream创建一个DataFetcher,添加一个FetcherListener,并使用一个新线程启动DataFetcher

对于初学者,使用ProcessBuilder,而不是Runtimeexec