在Java中获取文本用户界面(类似ncurses)function的最佳方法是什么?

我需要实现一个具有类似ncursesfunction的控制台应用程序(可能是Java)(例如导航菜单和重绘整个屏幕)。

到目前为止,我能找到的唯一解决方案是CHARVA( “用于文本终端的Java窗口工具包” ),tuipeer( “用于Java AWT的文本用户界面” )和一个非常古老的Dr. Dobb的文章( “A Java AWT的文本UI“ )。

到目前为止,CHARVA是我能找到的最好的东西,但我不喜欢使用JNI包装诅咒的想法。

有没有标准的方法,比如用AWT / Swing来做这个? 有什么其他选择吗?

自2010年以来,有Lanterna:

Lanterna是一个Java库,允许您在纯文本环境中编写简单的半图形用户界面,非常类似于C库curses,但具有更多function。 Lanterna支持xterm兼容终端和终端仿真器,如konsole,gnome-terminal,putty,xterm等等。 lantern的主要好处之一是它不依赖于任何本地库,而是在纯Java中运行100%。

更多信息: https : //github.com/mabe02/lanterna

您可能希望在此处投票支持此问题: http : //bugs.sun.com/bugdatabase/view_bug.do?video_id = 6351276

基本上没有好办法在没有JNI的情况下获得类似ncurses的function,直到解决了这个问题。

我相信Jcurses是curses API的本机java实现,我记得它有一些怪癖,但它应该能够做你想要的:

http://sourceforge.net/projects/javacurses/

尝试java curses (抱歉它使用JNI)。 我还试图实现这个库的简短版本只是为了学习JNI,请参阅http://plindenbaum.blogspot.com/2008/01/java-native-interface-jni-notebook.html 。 人们还可以想象一个显示字符矩阵的专用JPanel:

 public class TPanel extends JPanel { private Vector> rows; protected void paintComponent(Graphics g) { //paint the characters (...) } } 

简短的回答是处理围绕curses的Java包装器。

答案很长:

终端变化很大,这就是为什么terminfo / termcap库存在以及为什么它们处理混乱(这些项目的维护者是圣徒btw)。 他们将所有真正基本的终端变化抽象为理智的东西。 Curses使那些高效的库使用。

如果您想要一个纯Java解决方案,那么您将需要这些库或它们在Java中的等价物。 我敢肯定有人会指出你,如果它存在,但据我所知,它不存在。

我在我的几个控制台java项目中使用JavaTUI( http://sourceforge.net/projects/javatui/files/ )。 这是我能找到的最好的东西,但它远非完美。 我认为在java世界中没有一个好的TUI实现。

我认为最好从TUI中抽象出Java代码,并在Web服务样式中使用ncurses来对应应用程序的几个独立部分或使用参数。 例如,编写TUI代码,当用户调用操作时,使用ncurses调用代码传递一些参数

 java -Daction=doSomething MyApp 

这样您就可以使用GUI编写应用程序代码,以备不时之需。