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?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?
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:
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.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); } } }
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.

Rispondi quotando