Guten Abend,
ich versuche ein eigenes Konsolenfenster mit JTextArea und JTextField zu erstellen.
Ich habe bereits die GUI erstellt und System.out und System.err werden erfolgreich in meine JTextArea "umgeleitet".
Unter der TextArea befindet sich ein einzeiliges JTextField, mit dem ich Text eingeben kann.
Diese Eingabe wollte ich zuerst an System.in umleiten, doch habe schnell gemerkt, dass dies wohl nicht möglich ist.
Diese Konsolenoberfläche muss im endeffekt mit einem Programm zusammenarbeiten, in dem folgende Methode ausgeführt wird.
Damit dieses Programm mit meiner Obefläche funktioniert habe ich Scanner(System.in) geändert. Nun steht dort nicht mehr System.in sondern mein eigener Input Stream der eigentlich meine Eingabe tragen soll.
Das sieht jetzt so aus:
Und im Parser
Es gibt keine Fehlermeldung, doch die Eingabe kommt nicht im Scanner an.
Wäre für jeden Hinweis offen
ich versuche ein eigenes Konsolenfenster mit JTextArea und JTextField zu erstellen.
Ich habe bereits die GUI erstellt und System.out und System.err werden erfolgreich in meine JTextArea "umgeleitet".
Unter der TextArea befindet sich ein einzeiliges JTextField, mit dem ich Text eingeben kann.
Diese Eingabe wollte ich zuerst an System.in umleiten, doch habe schnell gemerkt, dass dies wohl nicht möglich ist.
Diese Konsolenoberfläche muss im endeffekt mit einem Programm zusammenarbeiten, in dem folgende Methode ausgeführt wird.
Java:
public Parser()
{
commands = new CommandWords();
reader = new Scanner(System.in);
}
/**
* @return The next command from the user.
*/
public Command getCommand()
{
String inputLine; // will hold the full input line
String word1 = null;
String word2 = null;
System.out.print("> "); // print prompt
inputLine = reader.nextLine();
System.out.println(inputLine);
// Find up to two words on the line.
Scanner tokenizer = new Scanner(inputLine);
if(tokenizer.hasNext()) {
word1 = tokenizer.next(); // get first word
if(tokenizer.hasNext()) {
word2 = tokenizer.next(); // get second word
// note: we just ignore the rest of the input line.
}
}
// Now check whether this word is known. If so, create a command
// with it. If not, create a "null" command (for unknown command).
if(commands.isCommand(word1)) {
return new Command(word1, word2);
}
else {
return new Command(null, word2);
}
}
Damit dieses Programm mit meiner Obefläche funktioniert habe ich Scanner(System.in) geändert. Nun steht dort nicht mehr System.in sondern mein eigener Input Stream der eigentlich meine Eingabe tragen soll.
Das sieht jetzt so aus:
Java:
// Klasse, die mein Konsolenfenster erzeugt, gekürzt
private PipedOutputStream output;
private PrintWriter writer;
private InputStream in;
private JTextField inputArea;
public Output() {
output = new PipedOutputStream();
writer = new PrintWriter(output);
try {
in = new PipedInputStream(output);
} catch(IOException e) {
}
// ERZEUGUNG DER GUI
// Das Eingabefeld ist in inputArea gespeichert
}
public synchronized void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
String data = inputArea.getText();
inputArea.setText("");
writer.println(data);
}
}
public InputStream getInput() {
return this.in;
}
Und im Parser
Java:
public Parser(Console console)
{
commands = new CommandWords();
reader = new Scanner(console.getInput());
}
Es gibt keine Fehlermeldung, doch die Eingabe kommt nicht im Scanner an.
Wäre für jeden Hinweis offen
Zuletzt bearbeitet: