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:
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: