Java 将管道与默认终端工厂一起使用会打开一个Swing窗口
我正在尝试制作一个使用管道的Lanterna应用程序。下面是我的代码的大致情况:Java 将管道与默认终端工厂一起使用会打开一个Swing窗口,java,pipe,lanterna,Java,Pipe,Lanterna,我正在尝试制作一个使用管道的Lanterna应用程序。下面是我的代码的大致情况: DefaultTerminalFactory defaultTerminalFactory = new DefaultTerminalFactory(); Terminal terminal = defaultTerminalFactory.createTerminal(); Screen screen = new TerminalScreen(terminal); screen.startScreen(); s
DefaultTerminalFactory defaultTerminalFactory = new DefaultTerminalFactory();
Terminal terminal = defaultTerminalFactory.createTerminal();
Screen screen = new TerminalScreen(terminal);
screen.startScreen();
screen.setCursorPosition(new TerminalPosition(2, 0));
screen.setCharacter(0, 0, new TextCharacter('>', ANSI.GREEN, ANSI.DEFAULT, SGR.BOLD));
screen.refresh();
StringBuilder res = new StringBuilder();
while (true) {
KeyStroke keyStroke = screen.readInput();
if (keyStroke.getKeyType() == KeyType.Escape) {
screen.close();
break;
}
if (keyStroke.getKeyType() == KeyType.Enter) {
break;
}
if (keyStroke.getKeyType() == KeyType.Backspace) {
if (res.length() > 0) {
screen.setCharacter(res.length() + 1, 0, new TextCharacter(' ', ANSI.DEFAULT, ANSI.DEFAULT));
res.deleteCharAt(res.length() - 1);
screen.setCursorPosition(screen.getCursorPosition().withRelativeColumn(-1));
screen.refresh();
}
} else {
Character character = keyStroke.getCharacter();
if (character != null) {
res.append(character);
screen.setCharacter(res.length() + 1, 0,
new TextCharacter(character, ANSI.BLUE, ANSI.DEFAULT, SGR.BOLD, SGR.UNDERLINE));
screen.setCursorPosition(screen.getCursorPosition().withRelativeColumn(1));
screen.refresh();
}
}
}
// Do some other stuff that doesn't deal with the screen
screen.close();
当应用程序使用管道运行时,应该从stdin读取输入。然而,当我将输入导入运行程序(ls | java-jar…
)时,lanterna会打开一个swing窗口。当我将DeafultTerminalFactory更改为常规的UnixTerminal时,lanterna从管道开始崩溃。使用管道时,如何在终端中制作此应用程序?谢谢