我需要一些关于我的程序的帮助。我的主线程中有一个阻塞功能等待用户单击“Enter”。然后,当用户按下回车键时,应该触发 keypressed 事件,这将解除阻塞功能。但是,当程序遇到阻塞功能时,它只是冻结并且不注册按键事件。
所以,我的问题是,一个事件是否是可运行的,只要用户点击进入,它就会被添加到线程中?如果是这样,我的代码应该可以工作,对吧?如果不是这种情况,并且每个事件都不是一个单独的线程,那么任何人都可以告诉我如何在这里解决我的问题吗?我的阻塞功能:
public String getInput() {
synchronized(waitObject) {
try {
System.out.println("waiting");
waitObject.wait(); // throws exception, cba to add it here
} catch (Exception ex) {
ex.printStackTrace();
}
}
return(myString);
}
我的按键监听器代码:
public void keyPressed(KeyEvent e) {
System.out.println("key pressed");
char c = e.getKeyChar();
if (c == e.VK_ENTER) {
System.out.println("Enter pressed");
synchronized(waitObject) {
waitObject.notifyAll();
}
}
}
以及获取输入的函数:
private String getCommand() {
System.out.println("getting command");
CommandField command = new CommandField((JFrame)(this));
command.setPreferredSize(new Dimension(getWidth(), 30));
m_panel.add(command, BorderLayout.NORTH);
validate();
command.requestFocus();
System.out.println(command.getInput());
return null;
}
这个函数是从另一个 keylistener 调用的:
public class Listener implements KeyListener {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_F2) {
System.out.println(getCommand());
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}