PDA

View Full Version : Java: ridefinire classe Inputstream


Davy83
30-08-2009, 17:58
Ciao a tutti.
Ho il problema di ridefinire lo standard Input per poter leggere da una textarea ciò che viene immesso da tastiera.
Per lo Standard output ho risolto ridefinendo la classe PrintStream e il suo metodo write. Ora non riesco a fare lo stesso con la classe Inputstream.

Questo è come ho ridefinito l' Outputstream:

package gtm;


import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JTextArea;

/**
* @author
*/
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 ) );
}

}


Questa è la classe per Inputstream

package gtm;

import java.io.*;
import javax.swing.JTextArea;

/**
*
* @author
*/
public class MyInputStream extends InputStream{
private JTextArea jtxtOut;

public MyInputStream (JTextArea jtxtOut){
this.jtxtOut = jtxtOut;
}

@Override
public int read() throws IOException {
int inPtr=0;
String s = jtxtOut.getText();
if( inPtr >= s.length() ) return -1;
else { inPtr++; return s.charAt(inPtr-1);}
// throw new UnsupportedOperationException("Not supported yet.")
}
}


e qui è la parte di codice nella classe dell'interfaccia grafica:

package gtm;

import java.io.*;
import java.util.*;
import gtm.MyInputStream.*;

/**
* @author
*/
public class NewJFrame extends javax.swing.JFrame {


/** Creates new form NewJFrame */
public NewJFrame() {
initComponents();


PrintStream out = new PrintStream( new MyOutputStream( jtxtOut ) );
InputStream in = new InputStream( new MyInputStream( jtxtOut ) ); // errore
System.setOut( out );
System.setIn( in );

jtxtOut.setText("");

}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}

private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jtxtOut;

L'errore è su quella riga commentata, mi sottolinea la "parola" InputStream dopo il new e mi dice :

java.io.InputStream is abstract; cannot be instantiated.

Perché per l'OutputStream funziona tutto e per l'InputStream, che dovrebbe funzionare allo stesso modo mi da errore?????

Spero che qualcuno mi possa aiutare...E' urgentissimo!!!!
:help: :help: :help:

nuovoUtente86
30-08-2009, 18:30
Nel caso del PrintStream (che in pratica funge da wrapper aggiungendo funzionalità) lo stai instanziando passando come argomento una classe figlia di OutputStream come è giusto che sia. Nel caso di Inputstream invece cerchi di instanziare attraverso l' operatore new una classe astratta e ciò non è lecito.

Davy83
30-08-2009, 18:54
Nel caso di Inputstream invece cerchi di instanziare attraverso l' operatore new una classe astratta e ciò non è lecito.

E quindi????????????????

Come dovrei fare per usare l'inputstream???

nuovoUtente86
30-08-2009, 18:57
InputStream in = new MyInputStream( jtxtOut ) ;

Davy83
30-08-2009, 20:08
Che idiota....:doh:

Cmq, a parte questa cavolata...

Ora dovrei prendere il valore immesso sulla textarea.
Ho una tastiera telefonica che stampa i numeri e devo prenderli per fare delle scelte in base al numero immesso.

Io avevo pensato alla classe Scanner ma non mi funziona...


System.out.println("Scrivere un numero:");

Scanner scan=new Scanner(System.in);
int s=0;
s = scan.nextInt();
System.out.print(s);


La risposta ovvia è getText(). E sicuramente dovrò usarlo ma ci sono due problemi:

1- La textarea che viene modificata, deve tenere sempre il cursore del testo alla fine. Per fare ciò bisogna usare la proprietà UpdateCaretPosition() della finestra ma non so cosa scrivere nell'evento. Questo non funziona:

private void jtxtOutCaretUpdate(javax.swing.event.CaretEvent evt) {
jtxtOut.setCaretPosition(jtxtOut.setRows(jtxtOut.getDocument().getLength()));
}


dove jtxtOut è la mia Area di Testo.
2- Ma getText() cosa prende? La parte di testo che va dal cursore fino alla fine del testo?

VI prego aiutatemi!!!!

Davy83
31-08-2009, 20:26
Dai dai un aiutino per favore!!!!
:help: :help: :help: :help: :help: