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

问题描述 投票:0回答:8

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

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

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

是否有任何标准方法(例如使用 AWT/Swing)来执行此操作?还有什么其他选择?

java ncurses tui
8个回答
32
投票

自 2010 年起就有 Lanterna :

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

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


10
投票

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

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


4
投票

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

https://jexer.sourceforge.io/

https://gitlab.com/AutumnMeowMeow/jexer

enter image description here


2
投票

简短的答案是处理诅咒的 Java 包装器。

长答案:

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

如果您想要一个纯 Java 解决方案,您将需要这两个库或 Java 中的等效库。我确信如果它存在的话会有人指出这一点,但据我所知它不存在。


2
投票

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


1
投票

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

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


1
投票

尝试 javacurses(抱歉它使用了 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
 (...)
 }

}

1
投票

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

java -Daction=doSomething MyApp

这样,您也可以在需要时使用 GUI 来编写应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.