Client has gui and extra thread (to process socket input and print it out to passes object of type PrintStream). The gui form has new javax.swing.JTextArea(). I need to pass to thread the object PrintStream to write to: ClientThreadIn(PrintStream inOutput){...}. How to create/bind gui JTextArea to accept data form ClientThreadIn using PrintStream?
Client:
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
ClientThreadIn threadIn = new ClientThreadIn(in, System.out); // client passes it's System.out to thread for writing
So JTextArea should be similar to console. It should be able to accept data from Thread (actually Thread writes to PrintStream of gui)…
Is there something similar to JTextArea.getInputStream()?
One way is to create a class that links the JTextArea to an OutputStream, say called TextAreaOutputStream, and have it extend OutputStream. Give it a StringBuilder object to hold the String that it is constructing in the
write(int b)override, and give it a reference to the JTextArea that you want to write text to. Then when a new line character is encountered, write the String to the JTextArea, but be sure to do this on the Swing event thread or EDT.For example:
Then it is trivial to wrap this in a PrintStream object and have it used by your socket.