Ciao ragazzi,
vi prego di aiutarmi perchè sono nel pallone.Ho creato 2 programmi, un client ed un server.
Il Client è un cronometro che è scritto in modo da poter registrare in futuro la data, l'identità dell'utente loggato il tempo di connessione su di un file esterno, txt o excel. il cronometro deve partire solo se la login inserita è corretta.
Il server, controlla i dati di login inviatagli dal client, e in caso affermativo risponde con un flag, che autorizza il client a far partire il cronometro, in caso contrario invia un flag per segnalare l'errore di login.

quando provavo l'algoritmo da cmd senza interfaccia grafica i due programmi andavano bene e comunicavano, ma ora che ho cominciato ad implementarci intorno una GUI swing stanno facendo delle cose pazze e non funzionano bene più, specie nelle comunicazioni di scrittura e lettura fra client e server.

vi prego aiutatemi è molto importante per lavoro
:-(

ecco le mie classi

P.S. scusate se il codice è sporchissimo di commenti e altri comandi superflui per le prove passate!!!



--- PROJECT CLIENT ----

codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;


public class Cronometro{
    private JFrame frame;
    private JLabel labelTime;
    private JPanel panelButtons;
    private JButton buttonLogin;
    private JButton buttonLogout;
	JTextField username = new JTextField(15);
	JTextField password = new JTextField(15);
	JTextField telefono = new JTextField(6);
	JLabel status = new JLabel("Server Disconnesso");
	JLabel empty = new JLabel();
	JLabel title = new JLabel ("LudecaLog-In");
	JLabel nameLabel = new JLabel ("Nome Utente: ");
	JLabel passLabel = new JLabel ("Password: ");
	JLabel telLabel = new JLabel ("Telefono: ");
    private Timer timer;
    private long startTime;
    
    String rigaTesto;
   // DataInputStream in;
    BufferedReader in ;
    DataOutputStream  out;
    Socket clientSocket;

    public Cronometro ()
    {

		
        frame = new JFrame ("Cronometro");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.setSize (500, 500);

        labelTime = new JLabel ("0:00:00.0");
        labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
        labelTime.setHorizontalAlignment (JLabel.CENTER);

        buttonLogin = new JButton ("START");
        buttonLogout = new JButton ("STOP");
        buttonLogout.setEnabled (false);

		title.setForeground(Color.blue);
		title.setHorizontalAlignment(JLabel.CENTER);
		Font titleFont = new Font("Title", Font.CENTER_BASELINE, 50);
		title.setFont(titleFont);
		
		GridBagConstraints constr = new GridBagConstraints();
	
        panelButtons = new JPanel (new GridBagLayout());
        
        constr.gridx=0;
		constr.gridy=2;
		panelButtons.add(nameLabel,constr);
        constr.gridx=1;
		constr.gridy=2;
		panelButtons.add(username,constr);
		constr.gridx=0;
		constr.gridy=4;
		panelButtons.add(passLabel,constr);
		constr.gridx=1;
		constr.gridy=4;
		panelButtons.add(password,constr);
		constr.gridx=0;
		constr.gridy=5;
		panelButtons.add(telLabel,constr);
		constr.gridx=1;
		constr.gridy=5;
		telefono.setHorizontalAlignment(JLabel.LEFT);
		panelButtons.add(telefono,constr);
		constr.gridx=1;
		constr.gridy=8;
		panelButtons.add(empty,constr);
		constr.gridx=1;
		constr.gridy=9;
		panelButtons.add(status,constr);
		constr.gridx=0;
		constr.gridy=10;
        panelButtons.add (buttonLogin,constr);
	    constr.gridx=2;
		constr.gridy=10;
	    panelButtons.add (buttonLogout,constr);
		frame.setVisible(true);
		frame.add(title,BorderLayout.NORTH);
        frame.add (labelTime, BorderLayout.CENTER);
        frame.add (panelButtons, BorderLayout.SOUTH);
       

        timer = new Timer (50, new ActionListener () {
            public void actionPerformed (ActionEvent e) {
                long diffTime = System.currentTimeMillis () - startTime;

                int decSeconds = (int) (diffTime % 1000 / 100);
                int seconds = (int) (diffTime / 1000 % 60);
                int minutes = (int) (diffTime / 60000 % 60);
                int hours = (int) (diffTime / 3600000);

                String s = String.format ("%d:%02d:%02d.%d", hours, minutes,
                                          seconds, decSeconds);

                labelTime.setText(s);
 
            }
        });



        buttonLogin.addActionListener (new ActionListener () 
        {
            public void actionPerformed (ActionEvent e)
            {
        
            /***************** 1 CONNESSIONE AL SERVER *******/
        	           try {
        	        	   clientSocket = new Socket("192.168.42.176",9910);
        	        	   System.out.println("Connessione al Server in atto..."); 
        	        	  
        	        	   String loginOperatore = new String() ;
        	        	   
        	        			  loginOperatore=(username.getText()+password.getText()+telefono.getText());
        	        	   
        	        	   //apertura stream di input
        	               InputStreamReader isr=new InputStreamReader(clientSocket.getInputStream());
        	               BufferedReader in=new BufferedReader(isr);
        	               
        	               //apertura stream di output
        	               OutputStreamWriter osw=new OutputStreamWriter(clientSocket.getOutputStream());
        	               BufferedWriter bw=new BufferedWriter(osw);
        	               PrintWriter out=new PrintWriter(bw,true);
        	               
        	               //invio della stringa al server
        	               out.println(loginOperatore.toString());
        	               status.setText("Connesso al Server, controllo la Login");
        	               
        	               
        	               String confermaLogin = new String();
        	               System.out.println(confermaLogin=in.readLine());
        	               System.out.println("ciao----->"+(confermaLogin));
        	               if(confermaLogin.equals("OK"))
        	               {
        	            	   //if (clientSocket != null && out != null && in != null) {
    					            Tempo tempo = new Tempo();
			        				final Date data = tempo.dataCompleta;
			        				startTime = System.currentTimeMillis();
			        	            timer.start();
			        	            buttonLogin.setEnabled(false);
			        	            buttonLogout.setEnabled(true);        	            
			        				status.setText("<html>Log In Effettuato con Successo! 
Data e Ora:
"+ data+"</html>");
								       		
					       // }	 
        	               }
        	               else if (confermaLogin.equals("DATI_ERRATI"))
        	               {
        	            	   status.setText("ERRORE!!! Dati di Log-In Errata!!");
         	            	   
        	               }
        	               
        	              
        	    
        	               //chiusura della socket e degli stream
        	               clientSocket.close();
        	               in.close();
        	               bw.close();
        	               out.close();		     				         
						   
					  	  } 
        	           catch (UnknownHostException err) 
					  	  {
					            System.err.println("Errore: probelmi di comunicazione");
					        } 
        	           catch (IOException err1)
        	           {
					            System.err.println("Errore: probelmi di comunicazione");
					        }
             
        	           /******************************** 1 FINE CONNESSIONE AL SERVER *******/
            }
        });

        buttonLogout.addActionListener (new ActionListener () {
            public void actionPerformed (ActionEvent e) 
            {
                    timer.stop ();
                    buttonLogin.setEnabled (true);
                    buttonLogout.setEnabled (false);
            		Tempo tempo = new Tempo();
            		final Date data = tempo.dataCompleta;
            		status.setText("<html>Log Out Effettuato con Successo! 
Data e Ora:
"+ data+"</html>");
            		
            }
        });
        
        frame.setVisible (true);
    }
    
    

    public static void main (String[] args)
    {
    	SwingUtilities.invokeLater (new Runnable() 
    					           {
    		                        public void run() 
    		                        {
            							new Cronometro();
            						}
    							   });
    }
}
codice:
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;


public class Tempo{
		    public int ore,minuti,secondi,giorno,mese,anno;
		    public long dataMillis;
		    public Date dataCompleta = new Date();

		   //costruttore di default
		   public Tempo(){		    

			  GregorianCalendar c =new GregorianCalendar();
			  dataCompleta=c.getTime();
			  dataMillis=c.getTimeInMillis()/* / (24*60*60*1000)*/;
		      ore=c.get(Calendar.HOUR_OF_DAY);
		      minuti=c.get(Calendar.MINUTE);
		      secondi=c.get(Calendar.SECOND);
		      giorno=c.get(Calendar.DAY_OF_MONTH);
		      mese=c.get(Calendar.MONTH);
		      anno=c.get(Calendar.YEAR);

		      
		   }//Tempo
	}//tempo