Originariamente inviato da orcL3
Il problema, ora sta nel fatto che se creo un programma che legge dei caratteri digitati su console e poi lo eseguo, mi rimane bloccato sulla lettura dei caratteri, poiche non ho la console come il dos in cui scrivere e se scrivo nella JTextArea console non succede niente. Ora quindi esiste un modo per comunicare al processo il carattere che ho digitato?
La cosa più semplice e immediata è registrare un KeyListener sulla JTextArea che "simula" la console. Quando ricevi notifica in keyTyped() di un carattere, dovresti scriverlo sul OutputStream che ti fornisce Process. Ma non è tutto qui. Infatti tu hai dei char ... mentre con OutputStream scrivi solo byte "crudi". Dovresti quindi incapsulare l'OutputStream ad esempio in un OutputStreamWriter per poter scrivere "a caratteri". E qui c'è un'altra questione: quale charset di codifica dei caratteri? Quello di default della piattaforma?
Ma non è ancora finito: la "vera" console generalmente è "bufferizzata". I caratteri arrivano alla applicazione solo quando viene premuto invio. E la console gestisce "a monte" la cancellazione con backspace.
Se vuoi renderti conto meglio, prova questo programmino:
codice:
import java.io.*;
public class Prova {
public static void main(String[] args) {
try {
InputStreamReader isr = new InputStreamReader(System.in);
int ch;
while ((ch = isr.read()) != -1) {
System.out.println("premuto '" + (ch > 31 ? (char) ch : "") + "' (codice " + ch + ")");
}
} catch (Exception e) {
System.out.println(e);
}
}
}
Lancialo da una console "vera". Digita i caratteri "pippo". Non vedi subito le righe "premuto ...blabla...". Premi invio e ... le vedrai tutte quante di botto.
Capito? E se dopo la 'o' di pippo premi backspace, la console cancella il carattere dal buffer e se digiti es. 'a' (e poi invio) alla applicazione arriva "pippa" ... non pippo [codice backspace] a
Tutto questo solo per farti capire le problematiche. Se le hai capite .... intuisci che non è così banale fare esattamente ciò che fa la console vera.