Salve, giusto qualche giorno fa ho ultimato il mio server e il mio client che, connessi tra loro attraverso i sockets, si scambiano messaggi. Quelle applicazioni, tuttavia, non erano applicazioni grafiche(console) e quindi ho deciso adesso di dargli una grafica. Desso ho un problema per quanto riguarda il server. Metto le tappe che ho fatto:

1) costruisco un JButton che, una volta cliccato, fa avviare un thread che crea il server alla porta 6000 e attende che un client vi acceda.
Inoltre creo (lo dico a parole mie, scusate i miei termini scarni) un oggetto della classe OutputStream con parametro Il Client. Adesso faccio vedere il pezzo di codice
codice:
OutputStream out = client.getOutputStream();
Fin qui non c'è problema

2) costruisco una JFieldText e un JButton. Alla pressione di questo bottone, il programma manda in esecuzione un altro Thread. Creo una String mess alla quale do il valore della textField attraverso un costruttore e poi creo un oggetto di PrintStream con parametro out (che si trova in un'altra classe) facendo così
codice:
prova2 prov = new prova2(); // prova2 è la classe che contiene out
p = new PrintStream(prov.out); 
		p.println(mes); //mes =  la variabile che contiene il contenuto della JFieldText
ora, sapendo che il messaggio contenuto nella JFieldText arriva effettivamente alla variabile mess (ho provato a mettere un System.out.printl(mess)), perchè il compilatore mi indica come sbagliata p = new PrintStream(prov.out); ????

se volete vi posto tutti i codici

ecco il thread che contiene la connessione e la dichiarazione di OutputStream out. Il suo nome è prova2

codice:
package serververo;


import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JOptionPane;

public class prova2 implements Runnable{
ServerSocket server;
Socket client;
OutputStream out;
	@Override
	public void run() {
		try {
			server = new ServerSocket(6000);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		    client = new Socket();
		   
		   JOptionPane.showMessageDialog(null, "connessione effettuata con successo, attesa del client...");
		    try {
				client = server.accept();
				out = client.getOutputStream();
			} catch (IOException e) {
				
				e.printStackTrace();
			}
		    JOptionPane.showMessageDialog(null, "un client si è collegato");
		   
			}
		
	}
e qui c'è il thread riguardante la scrittura del messaggio (PrintStream), il nome ddella classe è prova

codice:
package serververo;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;



public class prova implements Runnable {
	String mes;
	
	PrintStream p;
	public  prova(String mess) throws IOException
	{
		this.mes = mess;
	}

	@Override
	public void run() {
		
        prova2 prov = new prova2();
        System.out.println(mes);
		p = new PrintStream(prov.out);
		p.println(mes);
		
	}


}
infine ecco il codice della finestra grafica

codice:
package serververo;

import java.awt.BorderLayout;

public class server extends JFrame {
	
    OutputStream output;
    InputStream input;
    BufferedReader leggi;
    PrintStream scrivi;
    
	private JPanel contentPane;
	private JTextField textField;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					server frame = new server();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public server() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 547, 408);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		
		final JButton btnConnetti = new JButton("connetti");
		btnConnetti.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
				prova2 connessione = new prova2();
				Thread connect = new Thread(connessione);
				connect.start();
				    
			}
		});
		
		textField = new JTextField();
		textField.setColumns(10);
		
		JButton btnInviaMessaggio = new JButton("INVIA MESSAGGIO");
		btnInviaMessaggio.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent arg0) {
			try {
				String messaggio = textField.getText();
				prova Prova = new prova(messaggio);
				
				Thread proviamo = new Thread(Prova);
				proviamo.start();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			}
		});
		
		JTextArea textArea = new JTextArea();
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane.setHorizontalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(25)
							.addComponent(btnConnetti))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addContainerGap()
							.addComponent(textField, GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE))
						.addGroup(gl_contentPane.createSequentialGroup()
							.addGap(210)
							.addComponent(btnInviaMessaggio)))
					.addContainerGap())
				.addComponent(textArea, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 531, Short.MAX_VALUE)
		);
		gl_contentPane.setVerticalGroup(
			gl_contentPane.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_contentPane.createSequentialGroup()
					.addContainerGap()
					.addComponent(btnConnetti)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(textArea, GroupLayout.PREFERRED_SIZE, 238, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED, 7, Short.MAX_VALUE)
					.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(btnInviaMessaggio)
					.addGap(13))
		);
		contentPane.setLayout(gl_contentPane);
	}
}