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

时间:2009-08-24 09:20:01

标签: java ncurses tui

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

到目前为止,我能找到的唯一解决方案是CHARVA("A Java Windowing Toolkit for Text Terminals"),tuipeer("A Text User Interface for the Java AWT")和一个非常古老的Dr. Dobb的文章("A Text UI for the Java AWT ")。< / p>

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

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

8 个答案:

答案 0 :(得分:26)

自2010年以来,有Lanterna:

  

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

public class TPanel extends JPanel
{
private Vector<Vector<YourCharAndStyle>> rows;

protected void paintComponent(Graphics g)
 {
 //paint the characters
 (...)
 }

}

答案 4 :(得分:1)

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

答案很长:

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

java -Daction=doSomething MyApp

通过这种方式,您可以使用GUI编写应用程序,以备不时之需。

答案 7 :(得分:0)

您可以尝试Jexer-Java文本用户界面:

https://github.com/klamonte/jexer