© Tithi Luadthong/Shutterstock.com
Wie der Einsatz von Lanterna gelingt

Ich geh mit meiner Laterne


Lanterna ist eine Library, mit der sich Kommandozeilentools in Java erstellen lassen. Es ähnelt der bekannten C-Library Curses [1], kommt jedoch mit mehr Funktionen daher. Lanterna kann reine Terminals emulieren, sodass damit Installationsassistenten möglich sind. Andererseits lassen sich damit textbasierte GUIs mit Buttons, Drop-down-Menüs und dergleichen erstellen, was zum Beispiel für Systemtools wie YaST [2] von openSUSE geeignet ist.

Um ressourcenschonende Software zu erstellen, muss es nicht immer eine so mächtige Frontend Library wie JavaFX sein. Beliebte Systemtools, die auf Linux laufen, machen es vor: alsamixer, YaST, NVIDIA Installer. Allesamt machen sie von Bibliotheken Gebrauch, die textbasierte GUIs einsetzen. Sie haben den Vorteil, dass sie auf der Konsole laufen und sich remote einfach öffnen lassen.

Ein Nachteil von Lanterna ist sicherlich, dass Entwickler von JavaFX-Programmen erst einmal umdenken, sprich den Aufbau eines Terminals verstehen müssen, ehe sie ein funktionsfähiges textbasiertes GUI erstellen können.

Drei-Schichten-Modell

Lanterna [3] besteht aus drei Schichten (Abb. 1), nämlich Terminal, Screen sowie TextGUI. Auf der Terminal-Ebene lassen sich Zeichen ausgeben, der Cursor bewegen, Tastatureingaben erkennen sowie die Ausgaben formatieren. Im Prinzip ähnelt die Terminalausgabe einer Session auf der Linux-Konsole (Abb. 2).

minosi_lanterna_1.tif_fmt1.jpgAbb. 1: Lanterna kann Text auf drei Ebenen ausgeben
minosi_lanterna_2.tif_fmt1.jpgAbb. 2: Ein Programm, das auf der Terminalebene läuft

Die Screen-Ebene baut auf der Terminal-Ebene auf, sodass zuerst ein Terminal erstellt werden muss, ehe die Screen-Ebene funktioniert. Ein Screen gleicht einem doppelt gepufferten Videospeicher (Abb. 3). Beide Puffer – vorne sowie hinten – lassen sich direkt ansprechen und modifizieren. Der Inhalt wird in den Puffern gespeichert, wobei der Inhalt aus dem hinteren Puffer nach vorne gebracht werden kann. Anders als bei GUIs bestehen Terminal, Screen und TextGUI nicht aus Pixeln, sondern aus Textzeichenoberflächen.

minosi_lanterna_3.tif_fmt1.jpgAbb. 3: Die Screenebene besteht aus einem vorderen und einem hinteren Puffer

Die oberste Ebene bildet das TextGUI, auf der sich dieselben Elemente implementieren lassen wie bei einem pixelbasierten GUI: Tabellen, Buttons, Dialogfenster usw.

Start einer Session

Um überhaupt Text auf der Konsole auszugeben, ist es zuerst erforderlich, eine Terminalsitzung zu erzeugen:

import com.googlecode.lanterna.terminal.DefaultTerminalFactory; public void setupTerminal() { DefaultTerminalFactory terminalFacto...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang