BlockingQueue 无法从 JTextField 读取字符串



我在创建自定义控制台时遇到问题,代码如下:

public class UserConsole {
protected static BlockingQueue<String> inputData;
private final static JTextArea textArea = new JTextArea();
private static JTextField textField = new JTextField("");
private void createGUI() {
final KeyListener returnAction = new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyChar() == 'n') {
returnInput();
}
}};
}
private void returnInput() {

//Here is the problem, the BlockingQueue throws a NullPointerException, which is strange, because the...
//...right after "System.out.println(textField.getText());" works perfectly fine.
inputData.offer(textField.getText());
System.setOut(userStream);
System.out.println(textField.getText());
textField.setText("");
System.setOut(nebulaStream);
}
}

我试着在网上搜索,但没有找到任何东西,也试着添加.toString(),但效果不好。

据我所知,BlockingQueue无法初始化。。。所以我的最后一个问题是。为什么BlockingQueue没有读取JTextField的字符串,以及如何解决它

我希望这不是我错过的明显的事情,感谢每一次帮助!

据我所知,BlockingQueue无法初始化。。。所以我的最后一个问题是,为什么BlockingQueue没有读取JTextField的字符串,以及如何解决它?

我们没有看到代码的一些重要部分,但这里有一些可能的问题。

  1. 我看不出阻塞队列实际实例化在哪里。也许初始化行应该是这样的:

    protected static final BlockingQueue<String> inputData = new LinkedBlockingQueue<>();
    
  2. 我们看不到从阻塞队列中删除字符串的位置。如果要检查结果是否已计算,则应使用poll(),它将返回null,直到向阻塞队列提供重置为止。

    // this will not wait for the result but will return null initially
    String jtextResult = inputData.poll();
    

    如果需要等待结果,请使用take(),但永远不应该在GUI线程上执行此操作,因为UI将暂停,直到计算出结果,而不需要后台线程。

最新更新