Java多线程进程

标签 java multithreading input process

我正在为我的公司制作一个核心服务器管理系统,服务器管理器和服务器本身都是 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() 的调用会卡住线程。我建议您同时监听 InputStreamErrorStream,并且要同时执行这两个操作,您需要使用 Threads 或 java蔚来。对于Threaded解决方案,我构建并使用了 DataFetcher专门用于此类目的。您需要做的就是围绕 InputStream 创建一个 DataFetcher,添加一个 FetcherListener,然后启动 DataFetcher一个新的线程

关于Java多线程进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27512671/

相关文章:

java - 如果我在 JSP 中有 html 元素,那么执行顺序是什么?

java - 在所有 Activity 中保持我的 soundPool 样本加载

c++ - C++中依赖网络I/O提供跨线程同步

c# - Hangfire:从关键部分内排队后台作业

python - 在 Python 中使用 Tkinter 时程序挂起

java - 在 Java 中将 JLabel 放在 JLabel 之上

java - 无法使用 FCM 解析 Android 通知的符号 'NotificationChannel'

java - 未为类定义 runOnUiThread

android - 输入 "tap"命令丢失(Android 终端模拟器)

Java 输入不工作(初学者)