标签: jline2

jline2打印"^ J"时应该在telnet控制台上打印"\n"

我正在使用JLine 2(v2.13)和Socket IO为我的应用程序创建一个管理控制台,可以通过普通的telnet客户端访问.但是我发现打印出换行符时会打印出奇怪的符号:

act.app.restart  restart app^Jact.job.list  List jobs
Run Code Online (Sandbox Code Playgroud)

正确的输出应该是:

act.app.restart  restart app
act.job.list     List jobs
Run Code Online (Sandbox Code Playgroud)

我追溯到代码,发现以下代码行导致了麻烦:

在此输入图像描述

另一个奇怪的事情是当我按下向上箭头来获取历史记录时,控制台打印出来^[[A并且没有其他任何事情发生.

有谁有想法吗?

更新:添加了相关的源代码

  1. 接受传入telnet连接的代码:

在此输入图像描述

  1. 创建ConsoleReader和分派命令的代码:

在此输入图像描述

更新2

对不起,我已经消失了一段时间.刚回来,因为我的项目让我呼吸新鲜空气.所以这就是发生的事情:我创建了一个PrintWriter并将其用作^J问题的解决方法:

在此输入图像描述

但是,jline2与telnet会话一起使用时还有许多其他问题:

  1. 键入<TAB>显示选项卡而不是激活完整列表.但是,在我按下回车键后,它会给我一个完整的列表以及一条错误消息: 在此输入图像描述
  2. 键入<UP>箭头,显示^[[A,按回车键,它将执行我的最后一个命令.但是我丢失了命令行编辑

问题仍然存在,我相信应该有办法解决它只需要一些指导......

java telnet jline stty jline2

8
推荐指数
1
解决办法
355
查看次数

带有自己提示的 Java 命令行应用程序

我正在编写一个 JAVA 控制台应用程序。用户启动 jar 后,他应该得到一个类似于 Linux shell 的命令行,他可以在其中输入命令。这是我以前从未编程过的东西。通常我是在写 GUI 或者我用一些被解析的参数来启动 jar。

基本上我有2个问题:

  1. 是否有第三方库可以帮助从命令行读取用户输入、解析命令并生成提示?解析在我通常由 Apache Commons CLI 使用的主类中传递的参数。它也在这里充分使用还是有更好的方法?
  2. 是否有提供“无限输入”的最佳实践?我找到的所有解决方案都有 10 年或更长时间,例如:

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while(true){
        System.out.print("Enter String");
        String s = br.readLine();
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这仍然是最佳实践还是今天有更好的方法?

java command-line-tool jline apache-commons-cli jline2

3
推荐指数
1
解决办法
4596
查看次数