Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将管道与默认终端工厂一起使用会打开一个Swing窗口_Java_Pipe_Lanterna - Fatal编程技术网

Java 将管道与默认终端工厂一起使用会打开一个Swing窗口

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

我正在尝试制作一个使用管道的Lanterna应用程序。下面是我的代码的大致情况:

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从管道开始崩溃。使用管道时,如何在终端中制作此应用程序?谢谢