|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 81
|
Java: ridefinire classe Inputstream
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: Codice:
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 ) );
}
}
Codice:
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.")
}
}
Codice:
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;
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!!!!
Ultima modifica di Davy83 : 30-08-2009 alle 18:00. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
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.
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 81
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Codice:
InputStream in = new MyInputStream( jtxtOut ) ; |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 81
|
Che idiota....
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... Codice:
System.out.println("Scrivere un numero:");
Scanner scan=new Scanner(System.in);
int s=0;
s = scan.nextInt();
System.out.print(s);
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: Codice:
private void jtxtOutCaretUpdate(javax.swing.event.CaretEvent evt) {
jtxtOut.setCaretPosition(jtxtOut.setRows(jtxtOut.getDocument().getLength()));
}
2- Ma getText() cosa prende? La parte di testo che va dal cursore fino alla fine del testo? VI prego aiutatemi!!!! Ultima modifica di Davy83 : 31-08-2009 alle 20:25. |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 81
|
Dai dai un aiutino per favore!!!!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:03.




















