如何在纯Java中实现类似界面的接口,如果它不可能,为什么?



htop此处的描述。在关于getch的问题中,我看到了这样的陈述:;控制台在每个系统下都是不同的";。但是JVM的实现在每个系统下也是不同的
好吧,下面的评论表明我的问题并不代表问题的简单性。一些相关问题包括:

  • Java中C的"_getch(("的等效函数>
  • 读取单个字符在Java中(请参阅注释(
  • 控制台中基于选项卡的自动完成应用程序
  • 如何在java中检测箭头键?(这是隐含的仅关于AWT(
  • 识别Java Scanner中的箭头键或控制台应用程序
  • 。。。像这样的诅咒,用于终端应用程序的库?(100张赞成票,但因未见面而关闭…(

对我来说,它们在一定程度上是缺乏C类conio.h函数的衍生物。有些问题涉及比阅读更复杂的任务➡钥匙还有一些第三方库来解决它们jline3,jCurses。但除了他们是第三方并解决自己的复杂任务外,由于最初的问题,他们还必须处理特定的终端设置、JNI或JNA。那么,如果任务是在键入字母或箭头按钮后读取该按钮,该怎么办
在Java世界之外,还有像GNU Readline、curses这样的项目。但与纯Java项目不同的是,它们不能从";在任何地方跑步";VM。也许有些SIM卡没有终端功能。另一方面,实现了AWT,它需要比终端更多的硬件能力。因为我想它被认为是有价值的。现在越来越多的SoC能够使用X11,甚至连终端都不能。那么,成熟的终端如此罕见,它们在各种系统上的功能实现如此多样化,以至于其直接实现的工具在Java SE中没有立足之地吗?

在Linux上,尝试

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

玩得开心!因为c还会保存您从未输入过的数据。循环从tty中永久读取值,而不仅仅是您键入的值…

根据您的操作系统风格,您可能需要对tty进行一些额外的配置设置。

但这是(在控制台上(最接近Java中的getch

哦,关于";成熟的终端":我所知道的大多数终端只有在按下Enter键或类似键时才会发送数据,至少在默认设置中是这样。你所说的只是以这种形式存在于电脑上的东西,键盘和屏幕都是执行机器的一部分。

相关内容

最新更新