Java非阻塞输入

标签 java command-line user-input

我正在编写一个简单的 Java 命令行程序,我需要以非阻塞方式获取用户输入。

典型的阻塞方式是等待用户在连接之前放置一些配置选项,但非阻塞方式是在程序运行时调用类中的方法。

我的程序有一个线程在 while 循环中运行,如果我输入 scanner.nextLine(),循环将被阻塞,直到用户输入内容并按下 输入

我想让程序在用户放入数据时正常运行。当用户输入 uf 460.0 并在程序运行时按 enter 时,我想触发一个名为 updateFreq(double freq) 的方法。

我不确定这种行为对你是否有意义。

我是否需要创建一个单独的线程来不断地监听线路输入并将信号发送到主线程或其他东西?

提前谢谢你。

最佳答案

创建一个新线程,并实现添加自定义监听器以将事件传回主线程的功能。

手绘代码...未经测试,但您明白了:

class MainThreadClass implements InputListner {
  public MainThreadClass() {
    InputRunner inputRunner = new InputRunner();
    inputRunner.addInputListener(this);
    Thread t = new Thread(new InputThread())
    t.start();
  }

  @Override
  public void inputReceived() {
    //bla bla bla
  }
}

class InputRunner implements Runnable {
  ArrayList<InputListener> listeners = new ArrayList<InputLIsteners>();

  public void run() {
    //code to read input, when it is recieved execute fireInputReceived
  }

  public void addListener(InputListener listener) {
    listeners.add(listener);
  }

  public void fireInputReceived(String input) {
    //loop through all listeners
    //fire inputRecieved on each
  }
}

public Interface InputListener {
  public void inputReceived(String input);
}

关于Java非阻塞输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363885/

相关文章:

java - 将对象添加到 Documentum DfCheckOutOperation 时出现异常

从Windows cmd提示符远程访问MySQL

java - 从用户输入中读取和检查字符串

javascript - 将 Html 文本输入值获取到 Javascript 函数中

PHP:根据行的 ID 或日期保存行中的多个输入字段

java - DirectoryWalker 过滤器文件夹中包含 xml 文件

java - Spring cloud Netflix-Hystrix gradle 依赖项不允许启动 spring boot 应用程序

java - Apache Spark 启动时出错

perl - 如何在 Perl 单行代码中打印正在处理的文件的名称?

java - 如何从使用 API 的命令提示符运行 java 代码?