我正在编写一个简单的Java命令行程序,需要以非阻塞的方式获得用户输入。
典型的阻塞方式是等待用户在连接之前放置一些配置选项,但非阻塞方式是在程序运行时调用类中的方法。
我的程序有一个线程在while
循环中运行,如果我放入scanner.nextLine()
,循环将被阻止,直到用户输入内容并按下enter
。
我想让程序在用户放入数据时正常运行。我想在程序运行时,当用户放置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);
}