我在這裏需要一些幫助。我有一個阻塞函數在我的主線程中等待用戶點擊「Enter」。然後,當用戶點擊輸入時,按下按鍵的事件應該會觸發,這將解除阻止功能。但是,當程序遇到阻塞函數時,它會凍結並且不會註冊按鍵事件。我有一個Java線程和KeyEvent的問題?
所以,我的問題是,是一個可運行的事件,只要用戶點擊輸入,它就會添加到線程中?如果是這樣,我的代碼應該工作,對吧?如果情況並非如此,並且每個事件都不是一個單獨的線程,那麼是否有人能夠啓發我如何解決我的問題? 我的阻擋功能:
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);
}
我的KeyListener代碼:
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();
}
}
}
和功能獲取輸入:
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) {
}
}
:
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的叫
您可以發佈您的代碼的相關作品? – Keppil 2012-08-08 13:37:32
AWT使用[*事件調度線程*](http://en.wikipedia.org/wiki/Event_dispatching_thread)。如果你佔用這個線程,它將無法工作 - 而且你不會收到你的'KeyEvent'。 – oldrinb 2012-08-08 13:41:05
@Keppil添加了相關代碼 – AlphaUserGuru 2012-08-08 14:09:50