24

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

到目前为止,我能找到的唯一解决方案是 CHARVA(“A Java Windowing Toolkit for Text Terminals”)、tuipeer(“A Text User Interface for the Java AWT”)和一篇非常古老的 Dobb 博士的文章(“A Java AWT 的文本 UI" )。

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

有没有标准的方法,比如 AWT/Swing,来做到这一点?还有哪些其他选择?

4

8 回答 8

28

自 2010 年以来,有 Lanterna :

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

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

于 2012-12-18T15:03:40.227 回答
10

您可能想在这里为这个问题投票:http: //bugs.sun.com/bugdatabase/view_bug.do?bug_id= 6351276

本质上,在解决此问题之前,如果没有 JNI,就没有获得类似 ncurses 的功能的好方法。

于 2009-08-30T06:19:42.380 回答
2

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

于 2009-08-28T02:47:36.677 回答
2

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

https://github.com/klamonte/jexer

于 2018-11-18T16:44:55.973 回答
1

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

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

于 2009-08-24T10:09:30.100 回答
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
 (...)
 }

}
于 2009-08-24T15:36:50.470 回答
1

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

长答案:

终端变化很大,这就是为什么存在 terminfo/termcap 库以及为什么它们处理起来很混乱的原因(这些项目的维护者是圣人顺便说一句)。他们将所有真正基本的终端变化抽象为理智的东西。诅咒使那些在很好的高效库中使用。

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

于 2009-08-27T23:28:03.827 回答
1

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

java -Daction=doSomething MyApp

这样,您也可以在需要时使用 GUI 对您的应用程序进行编码。

于 2009-08-28T15:27:35.863 回答