我需要实现一个具有类似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来做这个吗?还有什么其他选择?
答案 0 :(得分:26)
自2010年以来,有Lanterna:
Lanterna是一个Java库,允许您在纯文本环境中编写简单的半图形用户界面,非常类似于C库curses,但具有更多功能。 Lanterna支持xterm兼容终端和终端仿真器,如konsole,gnome-terminal,putty,xterm等等。 lantern之一的主要好处之一是它不依赖于任何本地库,而是在纯Java中100%运行。
答案 1 :(得分:10)
您可能希望在此处投票支持此问题:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6351276
基本上没有好方法可以在没有JNI的情况下获得类似ncurses的功能,直到解决了这个问题。
答案 2 :(得分:1)
我相信Jcurses是curses API的本机java实现,我记得它有一些怪癖,但它应该能够做你想做的事情:
答案 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文本用户界面: