Java ANSI color codes in JTextArea darstellen?

n/a

Ensign
Registriert
Feb. 2025
Beiträge
170
Hi, habt ihr eine Idee, wie man die ANSI-Farben in einer JTextArea anzeigen lassen könnte?, ohne dabei mühselig jeden einzelnen Code zu hinterlegen und checken? Es geht also um Swing/Awt.

Oder kann man in Java eine Art Systemkonsole öffnen, und dorthin Text senden?

Oder kann man einen Sytem-Editor öffnen, und den Prozess manipulieren, damit dort anderer Text erscheint?

Warum das Ganze? Ich möchte so eine Art ssh client nachbauen, und die Konsole imitieren. Dabei wird fortwährend Text/Zeilen gesendet, und der Benutzer soll weiterhin die Möglichkeit besitzen, den ganzen Spaß über einen Klick auf x zu beenden.

Hab auch schon auf StackOverflow und GitHub danach vergebens gesucht. Sind auch viele Wichtigtuer dabei, wie es scheint.

Danke für Hilfe
 
Du kanns die ganz normale Windows-Konsole "cmd.exe" nutzen. Die kannst du über den Java ProcessBuilder aufrufen und bestimmt einen langen vorgefertigten String, Zeile für Zeile, ausgeben lassen.
 
  • Gefällt mir
Reaktionen: n/a
n/a schrieb:
Wie sende ich Text an das Teil?
System.out.println("Hello, World");

Falls du doch ne GUI bauen willst (Systemunabhängigkeit) dann könnte das hier hilfreich sein:
javax.swing.text.StyledDocument
 
Zuletzt bearbeitet:
Killkrog schrieb:
System.out.println("Hello, World");
Ne, das sendet immer an die Konsole, von der aus die Java-Anwendung gestartet wurde.

Man kann zwar mit Runtime.getRuntime().exec(new String[]{"cmd","/c"}); eine cmd hochholen, aber nichts an sie senden und die bleibt ja nicht auf: https://stackoverflow.com/a/29138847

Deshalb meine Fragen oben.
Ergänzung ()

Die Alternative wäre halt, alle Farb- und Steuerungscodes aus dem String zu entfernen und eine JTextArea nehmen. Aber das ist nicht, was ich möchte.
 
Zuletzt bearbeitet:
n/a schrieb:
Wie sende ich Text an das Teil?



Nö, ich muss in die Konsole streamen können, sprich, alle paar Sekunden kommt neuer Text hinzu.
Woher willst du den Text denn streamen? Eine Möglichkeit wäre ein Batch-Script, das den Text aus einer Text-Datei ausgibt und dann rekursiv alle paar Sekunden nur die letzte Zeile ausgibt, sofern sich die letzte Zeile von der vorletzten unterscheidet. Dann kannst du in die Datei auch neues einfügen. Und solange das Script läuft, schließt sich das cmd auch nicht. Dass Script startest du dann mit dem ProcessBuilder. Musst aber /k statt /c im Befehl nutzen. Ich nehme an du willst etwas in Richtung Hackertyper machen?
 
Zuletzt bearbeitet:
@Z_E_R_O Danke, das wäre eine Möglichkeit!

Z_E_R_O schrieb:
Ich nehme an du willst etwas in Richtung Hackertyper machen?

Kenn' ich nicht. Jein, ich rufe in einer Java-Anwendung so etwas auf wie docker logs -tf --tail 1000 <container> und das, was dabei zurückkommt, ist bunt und enthält eben diese Steuerungscodes. Zudem bleibt der Stream durch die Option -f geöffnet, bis man ein INT-Signal an den Proc sendet. ;)
 

Ähnliche Themen

Zurück
Oben