我有下面的代碼應該將System.in重定向到JTextField。但每當我嘗試new BufferedReader(new InputStreamReader(System.in)).readLine();
時,Swing GUI都會掛起。我如何從System.in中讀取行而不掛上GUI線程?在System.in上的readLine不掛上Swing GUI線程
private static LinkedBlockingQueue<Character> sb = new LinkedBlockingQueue<Character>();
BufferedInputStream s = new BufferedInputStream(new InputStream() {
int c = -1;
@Override
public int read() throws IOException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
c = sb.take();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
});
thread.start();
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
return c;
}
});
JTextField t = new JTextField();
t.addKeyListener(new KeyListener() {
@Override
public void keyTyped(final KeyEvent e) {
sb.offer(e.getKeyChar());
if (e.getKeyChar() == '\n' || e.getKeyChar() == '\r') {
t.setText("");
}
}
@Override
public void keyPressed(KeyEvent arg0) {
}
@Override
public void keyReleased(KeyEvent arg0) {
}
});
System.setIn(s);
壞主意#1 - 't.addKeyListener(新的KeyListener()' – MadProgrammer 2014-12-08 04:55:00
使用另一個線程有一個回調或?使用未來獲得結果嗎? – Jaskey 2014-12-08 04:57:00
@Jaskey可以演示嗎?我需要第三方庫嗎? – 2014-12-08 04:59:39