我有一个Java应用程序,该应用程序无法更改,并且在内部使用System.console()来获取用户输入。我通过执行.sh文件来运行它。我想在ProcessBuilder中调用该.sh文件,并能够捕获输入(和输出)。
许多SO使用者已经在许多帖子中指出,这似乎行不通; System.console()引发NullPointerException。试图从IDE内部运行单元测试时,同样的事情发生了。基本上,您需要从一个 interactive 外壳程序运行Java应用程序,而从.sh在ProcessBuilder中运行该外壳程序时则没有该外壳程序。我尝试过ProcessBuilder.redirectInput(),ProcessBuilder.inheritIO(),什么都行不通。
在Windows中,似乎有些workaround。您可以先依次调用start和cmd.exe,再调用Java应用。这样,您正在使用 interactive shell,因此System.console()不再为null。
在Linux上有什么方法吗?
谢谢!