如何在纯java中实现类似htop的接口,如果不可行,为什么?

oyxsuwqo  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(302)

请在此处输入说明。关于…的问题 getch ,我看到类似“每个系统下的控制台都不一样”的语句。但是jvm的实现在每个系统下也是不同的。
好吧,下面的评论表明我的问题并不代表问题的简单性。一些相关问题是:
java中c的“\u getch()”的等价函数>
在java中读取单个字符(参见注解)
控制台应用程序中基于选项卡的自动完成
如何在java中检测箭头键(但这仅与awt有关)
识别java扫描仪或控制台应用程序中的箭头键。
... 诅咒,比如,终端应用程序库(100票,因未见面而关闭……)
对我来说,它们在某种程度上是缺乏c锥函数的衍生物。有些问题比阅读要复杂得多➡ 钥匙。还有一些第三方库可以解决这些问题jline3,jcurses。但是,除了他们是第三方和解决自己的复杂任务,他们必须处理特定的终端设置,jni,或jna,因为原来的问题。那么,如果任务是在输入一个字母或箭头按钮后读取它呢?
在java世界之外,还有gnu readline、curses等项目。但与纯java项目不同,它们不能从“随处运行”vm中获益。也许有些sim卡没有终端功能。另一方面,实现了比终端需要更多硬件功能的awt。因为我想这是值得的。现在越来越多的soc支持x11,甚至不支持终端。那么,成熟的终端是否如此罕见,它们在各种系统上的功能实现是否如此多样化,以至于直接实现的工具在javase中没有一席之地?

8zzbczxx

8zzbczxx1#

在linux上,请尝试

var inputStream = new FileInputStream( "/dev/tty" );
while( true )
{
    var c = inputStream.read();
    // Process c here …
    System.out.print( (char) c );
}

玩得高兴!因为 c 也将保存您从未输入的数据。循环从tty中永久读取值,而不仅仅是您键入的值…
您可能需要一些额外的tty配置设置,这取决于您的操作系统风格。
但这是(在控制台上)最接近的 getch 在 java 。
哦,关于“完全成熟的终端”:我知道的大多数终端只会在按回车键或类似键时发送数据,至少在默认设置下是这样的。你所说的是以这种形式存在的东西,只存在于PC机上,键盘和屏幕都是执行机器的一部分。

相关问题