问题标签 [jline]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4676 浏览

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

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

基本上我有2个问题:

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

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

0 投票
1 回答
54 浏览

scala - Scala -jline 文件完成器导致找不到文件(linux)

我在这段代码中看到了一些非常奇怪的东西。

当我运行并输入 build.sbt 时,一切都很好——调用了 process_file。当我取消注释文件完成行时,相同的文件被报告为不存在。这是怎么回事?

0 投票
1 回答
1727 浏览

linux - 由于使用 nohup 导致的“错误文件描述符”异常

我的应用程序可以通过 linux OS 中的终端作为 shell 可执行文件启动。正常执行时我没有问题,但是当我与“nohup”命令一起执行时,它会在“nohup.out”文件中记录以下异常

现在,根据我的分析,我的应用程序基于 spring shell,它在执行应用程序时最初尝试打开/访问终端/控制台。但是当使用 nohup 时,标准输入从 /dev/null 重定向,因此我的应用程序尝试打开/访问 /dev/null 作为终端,因此我得到了上述异常。

请问有人能指出我是否朝着正确的方向前进吗?还有 nohup 命令的替代方法吗?

0 投票
1 回答
2099 浏览

java - JLine 3 - 始终将提示保持在底部

我希望每次都在页面底部显示提示。

我有一个 GIF:提示没有正确显示

代码是用于读取行的代码:

它在一个线程中。

还有另一个线程:使用 JLine 2,代码将提示保持在底部(但它被错误了!)

对于完整来源: 程序的完整来源

0 投票
1 回答
3671 浏览

java - 使用 Java 设置终端背景颜色

我有一个 Java 程序,它使用 JLine2 来处理控制台终端上的输入和输出。出于美学原因,如果终端的背景颜色为白色,则此程序效果最佳。

那么,是否可以在 java 中设置终端的背景颜色?理想情况下使用 JLine,但我不介意其他解决方案,只要它们可移植且不太复杂。

这就是我想做的:

编辑

我不认为在命令行 java 中突出显示文本的问题是相关的。我不想设置打印字符的背景颜色,而是想设置终端屏幕的背景颜色。我可以打印一堆白色背景的空白,然后在上面打印,但这对我来说似乎是一个非常笨拙的解决方案。

例如,从此(黑色背景):

在此处输入图像描述

我想要这个(白色背景):

在此处输入图像描述

谢谢!

达里奥

0 投票
1 回答
1502 浏览

java - 带有 jLine 的 Java 控制台应用程序

我有一个多线程 Java 控制台应用程序。其中一个线程正在读取用户的输入,而其他线程将一些数据打印到控制台。当用户键入输入时编写器线程打印某些内容时,就会出现问题。它打断了用户。

我在输出的开头写了“\r”以清除该行以获得更好的外观。但是,我还想将用户在那一刻之前输入的内容打印到下一行。

例如,我想输入 123456 作为输入。但是当我输入 123 时,

作家线程打印“输出”。

我想显示我之前输入的内容(“123”),然后我将输入剩余的输入。

有人建议我使用 jLine。但我无法实现。您能否通过提供 jLine 库的示例用法或建议替代解决方案来帮助我?

重要的是不要阻塞编写器线程。它必须在输出到达时打印输出。

0 投票
0 回答
260 浏览

java - 如何使用从 64 位 Windows 到 32 位 Windows 的本机代码部署 Java 应用程序?

我希望大写锁定的仇恨者现在很高兴并且在天堂。如您所见,所有字母都很小。玩的开心。

无论如何,我有一个关于java的问题。我有用java编写的应用程序,它使用一些外部库(确切地说是jansi和jline)。

我在 64 位的 windows 中编写应用程序,我编译它,并创建一个构建(干净并在 net beans 中构建),然后在我用来构建它的同一个窗口中启动我的应用程序,它工作正常。

外部库包含本机代码(例如 jline 包含调用一些 dll 文件的代码(jline 库有 jline32.dll 和 jline64.dll 文件))。

这两个文件都存在于库文件夹中,它适用于我的 64 位窗口。

我的问题是,如果我想在 32 位 Windows 上运行相同的应用程序,我需要做什么?

我需要在 32 位窗口上构建它以便 jline 使用 32 位 jline dll,还是我需要做其他事情?还是我不需要做任何事情。

我的意思是,我的应用程序不使用这个 dll。它们由 jline 库在内部使用。

好的,谢谢阅读。

0 投票
1 回答
467 浏览

java - 在 Java 控制台上检测 Ctrl 和 Alt 键

我目前正在使用 JLine ( http://jline.sourceforge.net/ ) 从 Java 控制台中一次读取一个字符。

如何检测我打电话时是否按下CtrlAltin.read();Ctrl如果按下orAlt键,我无法从 javadocs 或任何其他来源中弄清楚如何阅读。

0 投票
0 回答
227 浏览

scala - 如何告诉 Java 使用 jline3

Scala新手,跟着这个博客使用sbt(我有一点Java使用Eclipse的经验)。

sbt正在工作,但是我必须遇到此处ncurses描述的问题。我没有降级,而是尝试升级。我克隆了新的repo 并使用.ncursesjlinejline3mvn

我不知道如何指出java使用新的jline3. 这与说“我不知道如何用 scala / sbt 解决这个问题”是一样的。

  • 操作系统:拱门:Manjaro
  • ncurses 版本:6.0+20170902-1
  • java版本
  • openjdk 版本“1.8.0_144”
  • OpenJDK 运行时环境 (build 1.8.0_144-b01)
0 投票
1 回答
630 浏览

java - Java Mockito 卡在单例方法的 doReturn

我有一个单例类来帮助我从控制台读取输入:

我想测试的代码将其称为:

然后我的测试课:

我的测试卡在了doReturn("1").when(ioHelper).cr.readLine();线上,就好像它实际执行了该cr.readline();部分一样。我的堆栈跟踪指向private native int read0() throws IOException;在 FileInputStream 上找到的方法。评论表明,如果没有可用的输入,它会阻塞。我想替换readLine()控制台上的方法,因此当我的 CLI 要求输入时,我的测试可以“伪造”该输入。

编辑:2个有趣线程的调用堆栈:

扩展这个问题:我有一些方法可以询问用户多个输入(例如更新一些设置)。我认为最好的方法是将设置重构为一个接受参数并只测试这个新方法的方法,我是否正确?有没有一种解决方案,当任何方法试图从ConsoleReader? 我想过使用Robot,但如果读取不是由测试而不是底层逻辑完成,我如何确保它以正确的顺序传递击键?