Möchte gern den Konsolen Output auf JTextPane umleiten

Würde gern ein Programm schreiben, dass seinen Output aber nicht auf der Konsole ausgibt, sondern in einem JTextFrame mit einem JTextPane. Geht das? Kann man ein Fenster so einstellen, dass man den Textoutput nach dahin ganz normal zeilenweise umleiten kann? Mir ist für das JTextPane leider nur die Methode .setText bekannt.
Ansonsten bliebe mir nur der Aufruf des .jar Programms mittels .bat Datei auf der Windows Konsole.
Java:
.bat-Datei:
mode 800
java -jar JavaStart.jar
cmd.exe

Java:
import java.util.Scanner;

public class SternDreieck {
    public static void main(String[] args) {
    DreieckZeichnen();
    }
    static void DreieckZeichnen() {
        String starx;
        starx = "*";
        int anzahl = 20;
        System.out.println("Bitte Anzahl der Sterne für das Dreieck angeben:");
        Scanner myScanner = new Scanner(System.in);
        anzahl = myScanner.nextInt();
        System.out.println(starx);
        for (int i = 1; i <= anzahl; i++) {
            starx = starx + "*";
            System.out.println(starx);
        }
    }
}
 
Zuletzt bearbeitet:
Naja so aufwendig ist das letztendlich nicht du setzt einfach den output vom Systemoutput anstelle der Konsole auf einen PrintStream welches die Daten in ein ByteArray Schreibt , welches du dann in einer beliebiegen Form / Visualisierung darstellen kannst 🙂

So wird alles was normalerweise in den Systemoutput gelangt in dein PrintStream geschrieben / abgefangen und landet in dem ByteArray.
 
Zuletzt bearbeitet:
Du musst via ProcessBuilder dein Kommando starten und die Ausgabe (und den Error) lesen.

Diese Liste kannst du dann in deine TextPane oder ein anderes Kontroll pumpen.

Wie das ungefähr gemacht wird, habe ich mal in folgendes Mini-Programm gegossen. Führt einfach "nur" ein dir-befehl und zeigt Standard-Output in einer JTextArea an.
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JTextArea;

public class ProcessTest {

    public static void main(String[] args) throws IOException, InterruptedException {
	JFrame frame = new JFrame("Dir Ausgabe");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	JTextArea console = new JTextArea();
	frame.add(console);
	ProcessBuilder pB = new ProcessBuilder("cmd.exe", "/c", "dir");
	Process p = pB.start();
	InputStream inputStream = p.getInputStream();
	InputStream errorStream = p.getErrorStream();
	List<String> listOutput = dump(inputStream);
	dump(errorStream);
	p.waitFor();
	for (String string : listOutput) {
	    console.append("\r\n" + string);
	}
	frame.pack();
	frame.setVisible(true);
    }

    private static List<String> dump(InputStream inputStream) throws IOException {
	List<String> listOutput = new ArrayList<>();
	BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
	String line = null;
	while ((line = bufferedReader.readLine()) != null) {
	    listOutput.add(line);
	}
	return listOutput;
    }
}
 

Neue Themen


Zurück
Oben