我正在使用Jcrafts JSch库来构建终端应用程序。
它工作得很好并按照它所说的做,但是我必须将系统重定向,并且错误地使用各种摆动组件,以便在GUI应用程序中工作。
我注意到System.in重定向它依赖于按键将文本提交给System.in,这很好,直到你需要使用CRTL键为例。也是以前命令的向上箭头。
System.in重定向的类和用于提交的KeyListener
public class TextAreaStream extends InputStream implements KeyListener {
private JTextArea ta;
private String str = null;
private int pos = 0;
public TextAreaStream(JTextArea jtf) {
ta = jtf;
}
//gets triggered everytime that "Enter" is pressed on the textfield
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == e.VK_ENTER)
{
str = ta.getText() + "\n";
pos = 0;
ta.setText("");
synchronized (this) {
this.notifyAll();
}
}
}
@Override
public int read() {
if(str != null && pos == str.length()){
str =null;
return java.io.StreamTokenizer.TT_EOF;
}
while (str == null || pos >= str.length()) {
try {
synchronized (this) {
this.wait();
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
return str.charAt(pos++);
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
我的问题是"有没有办法让System.in用JSch识别箭头和CRTL命令,或者有更好的方法在Java Swing应用程序中显示控制台屏幕?"
Implentation
//System input redirection from TextArea
TextAreaStream ts = new TextAreaStream(textAreaInput);
textAreaInput.addKeyListener(ts);
System.setIn(ts);
答案 0 :(得分:0)
基本上没有办法在Java控制台上获取单个字符。如果可以阅读整行,你会没事的。但是单个角色是不可能的。你可以做两件事: