24

ncurses のような機能 (メニューのナビゲートや画面全体の再描画など) を備えたコンソール アプリケーション (おそらく Java) を実装する必要があります。

これを行うための唯一の解決策は、CHARVA ( 「A Java Windowing Toolkit for Text Terminals」 )、tuipeer ( 「A Text User Interface for the Java AWT」 )、および非常に古い Dr. Dobb の記事 ( 「A Java AWT のテキスト UI " )。

これまでのところ、CHARVA は私が見つけることができる最高のものですが、JNI を使用して呪いをラップするという考えは好きではありません。

これを行うには、AWT/Swing などの標準的な方法はありますか? 他にどのような選択肢がありますか?

4

8 に答える 8

28

2010年以来、ランテルナがあります:

LanternaはJavaライブラリであり、テキストのみの環境で簡単なセミグラフィカルユーザーインターフェイスを記述できます。これは、Cライブラリのcursesと非常に似ていますが、より多くの機能を備えています。Lanternaは、xterm互換端末と、konsole、gnome-terminal、putty、xtermなどの端末エミュレーターをサポートしています。lanternaの主な利点の1つは、ネイティブライブラリに依存せず、純粋なJavaで100%実行されることです。

詳細はこちら: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 Text User Interface を試すことができます。

https://github.com/klamonte/jexer

于 2018-11-18T16:44:55.973 に答える
1

簡単な答えは、curses の Java ラッパーを扱うことです。

長い答え:

ターミナルは大きく異なります。それが terminfo/termcap ライブラリが存在する理由であり、それらを扱うのが面倒な理由です (これらのプロジェクトのメンテナーは聖人です)。それらは、すべての本当に基本的な端末のバリエーションを正常なものに抽象化します。curses は、それらを使用するのに優れた効率的なライブラリーにします。

純粋な Java ソリューションが必要な場合は、これらのライブラリまたは同等の Java のライブラリが必要になります。存在する場合、誰かがあなたにそれを指摘すると確信していますが、私が知る限り、それは存在しません.

于 2009-08-27T23:28:03.827 に答える
1

Java cursesを試してください(JNI を使用して申し訳ありません)。また、 JNIを学習するためだけに、このライブラリの短いバージョンを実装しようとしました。文字のマトリックスを表示する特殊な 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

Jcurses は curses API のネイティブ Java 実装であると思います。いくつかの癖があることを思い出しますが、必要なことはできるはずです。

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

于 2009-08-24T10:09:30.100 に答える
1

Java コードを TUI から抽象化し、アプリケーションのいくつかの分離された部分に対して ncurses を使用するか、Web サービス スタイルで引数を使用する方がよいと思います。たとえば、TUI をコーディングし、ユーザーがアクションを呼び出すときに、ncurses を使用していくつかのパラメーターを渡してコードを呼び出します。

java -Daction=doSomething MyApp

このようにして、必要な場合に備えて、GUI を使用してアプリをコーディングすることもできます。

于 2009-08-28T15:27:35.863 に答える