我正在编写一个简单的 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/