Ciao a tutti, ho un problema in un programmino Java che riguarda lo standard input.
L'interfaccia grafica del programma prevede due TextArea, una dove vi compare lo standard output e nell'altra vorrei che vi fosse lo standard input, tipo la chat di messenger o un'altra qualsiasi. All'inizio premo un pulsante Start e inizia tutto.
Per l'output ho risolto con una classe MyPutputStream fatta così:
settando lo standard Output così, dove jtxtOut è la prima TextAreacodice:public class MyOutputStream extends OutputStream{ private JTextArea jtxtOut; public MyOutputStream (JTextArea jtxtOut){ this.jtxtOut = jtxtOut; } @Override public void write(int i) throws IOException { jtxtOut.append( String.valueOf( ( char )i ) ); } }
Per l'input ho provato in tutti i modi ma non ci riesco. Il mio programma, dopo lo Start crea un array di elementi e mi stampa nella prima TextArea l'elenco. Ora io dovrei scegliere uno di questi elementi immettendo dei caratteri (a volte numeri a volte parole o anche frasi) e vorrei che accadesse come nello standard input cioè:codice:PrintStream out = new PrintStream( new MyOutputStream( jtxtOut ) ); System.setOut( out );
1- quando scrivo compare tutto nella seconda TextArea;
2- quando premo Invio i caratteri vengono stampati sulla prima TextArea e vengono "presi" dal programma come se ci fosse ad esempio la classe Scanner, del tipo
Facendo la stessa cosa dell'output per lo standard input, cioè un extends di InputStream non funziona. Questo è quello che ho provato a fare:codice:int s=0; Scanner scan=new Scanner(System.in); s = scan.nextInt();
con relativocodice:public class MyInputStream extends InputStream{ private JTextArea jtxtIn; public MyInputStream (JTextArea jtxtIn){ this.jtxtIn = jtxtIn; } @Override public int read() throws IOException { int inPtr=0; String s = jtxtIn.getText(); if( inPtr >= s.length() ) return -1; else { inPtr++; return s.charAt(inPtr-1);} // throw new UnsupportedOperationException("Not supported yet.") } public void write() throws IOException{ int inPtr=0; String s = jtxtIn.getText(); if( inPtr >= s.length() ); else { inPtr++; System.out.print(s.charAt(inPtr-1));} } }
Qualcuno sa darmi una soluzione???? Vi prego aiutatemi, è urgente!!!codice:InputStream input = new MyInputStream( jtxtIn ); System.setIn( input );
Spero di essere stato chiaro nell'esposizione del problema.
Grazie in anticipo a chi mi vorrà dare un mano.

Rispondi quotando