codice:
import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JLabel;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.StringTokenizer;

import jxl.Cell;
import jxl.LabelCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import javax.swing.SwingConstants;
import java.awt.Font;
import java.awt.Color;


public class LudecaLogInServer implements Runnable{

	private JFrame frmLudecaLoginServer;
	private static JTable table = new JTable();
	private JPanel panel_1;
	
	static JTextArea schermoLog = new JTextArea();

   static BufferedReader in ;
    static DataOutputStream  out;

    static ServerSocket serverSocket = null;
    static Socket clientSocket = null;
    
  static  String[] nomiColonne = new String[] {"OPERATORE", "DATA LOG-IN", 
            "TELEFONO", "PAUSA", "N\u00B0 PAUSE"};

static String[][] valoriCelle = new String[50][4]; 
static DefaultTableModel modelloTabella=null;
	/**
	 * Launch the application.
	 */ 


	/**
	 * Create the application.
	 */
	public LudecaLogInServer(final Socket clientSocket) {
		initialize();
		//this.clientSocket=clientSocket;

		
	}

	/**
	 * Initialize the contents of the frame.
	 */
	@SuppressWarnings("unused")
	private void initialize() {
		/* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tu...feel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(LudecaLogInServer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(LudecaLogInServer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(LudecaLogInServer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(LudecaLogInServer.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        
		frmLudecaLoginServer = new JFrame();
		frmLudecaLoginServer.setTitle("Ludeca Log-In Server");
		frmLudecaLoginServer.setResizable(false);
		frmLudecaLoginServer.setBounds(100, 100, 580, 601);
		frmLudecaLoginServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frmLudecaLoginServer.getContentPane().setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 63, 554, 361);
		frmLudecaLoginServer.getContentPane().add(scrollPane);

		
		for(String[] riga:valoriCelle)
		{
			for(String cella:riga)
			{
							cella="null";
			}
		}
		modelloTabella = new DefaultTableModel(valoriCelle, nomiColonne);
		table.setCellSelectionEnabled(true);
		scrollPane.setViewportView(table);
		
				
		table.setModel(modelloTabella);
		table.getColumnModel().getColumn(0).setPreferredWidth(170);
		table.getColumnModel().getColumn(1).setPreferredWidth(200);
		table.getColumnModel().getColumn(2).setPreferredWidth(64);
		table.getColumnModel().getColumn(3).setPreferredWidth(43);
		table.getColumnModel().getColumn(4).setPreferredWidth(61);
		
		

		panel_1 = new JPanel();
		panel_1.setBounds(0, 532, 574, 34);
		frmLudecaLoginServer.getContentPane().add(panel_1);
		panel_1.setLayout(null);
		
		JButton btnNewButton = new JButton("AGGIORNA SCHERMO");
		btnNewButton.setBounds(10, 11, 139, 23);
		panel_1.add(btnNewButton);
		
		JButton btnNewButton_1 = new JButton("CREA LOG-IN");
		btnNewButton_1.setBounds(440, 11, 124, 23);
		panel_1.add(btnNewButton_1);
		
		JButton btnNewButton_2 = new JButton("SALVA FILE");
		btnNewButton_2.setBounds(245, 11, 89, 23);
		panel_1.add(btnNewButton_2);
		
		JPanel panel = new JPanel();
		panel.setBounds(0, 0, 564, 52);
		frmLudecaLoginServer.getContentPane().add(panel);
		panel.setLayout(null);
		
		JLabel lblNewLabel = new JLabel("Ludeca Log-In Server");
		lblNewLabel.setForeground(Color.BLUE);
		lblNewLabel.setFont(new Font("SansSerif", Font.BOLD, 30));
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setBounds(0, 0, 574, 52);
		panel.add(lblNewLabel);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(10, 431, 554, 101);
		frmLudecaLoginServer.getContentPane().add(scrollPane_1);
		
		
		schermoLog.setText("");
		scrollPane_1.setViewportView(schermoLog);
	}
	

	@Override
	public void run() {
		
		String esitoAccettazioneClient = new String();
    	esitoAccettazioneClient=null;
    	
    	try
    	{
    	    
    	    //serverSocket.setReuseAddress(true);
    	     in= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    	    //Stream di output
    	     out=new DataOutputStream(clientSocket.getOutputStream());
    	     
             while(true) 
             {
            	 String loginOperatore = new String();
         	    loginOperatore=in.readLine().toUpperCase();
                 if (loginOperatore == null || loginOperatore.equals("QUIT"))
                 {
                   break;
                 }
                 
                       
                 //out.writeBytes(loginOperatore + '\n');              
           
                 System.out.println("Il Client ha scritto: " + loginOperatore);
         	    Cell cellaStringaLogIn;
    	        String stringaEstrattaDaCella = "";    
    	        LabelCell labelCellLogIn;
    	        
    	      //Apro il file di excel da leggere
                Workbook workbook = Workbook.getWorkbook(new File("C:\\Users\\tl2cwdr6hyyq2rvm6tv2\\Desktop\\listalogin.xls"));
                //Seleziono il foglio sul quale voglio operare (il primo foglio ha indice 0)
                Sheet sheet = workbook.getSheet(0);
                 

                //Leggo tutte le righe
                int riga = 1;//indice riga, parto da 1 per saltare l'intestazione dei campi
                int numeroRighe = sheet.getRows();//calcolo quante righe ci sono nel foglio
                
                //Attento che c'è una riga in più per l'intestazione!
                while(riga<numeroRighe)
                {
                
                    cellaStringaLogIn = sheet.getCell(0, riga);
                    labelCellLogIn = (LabelCell)cellaStringaLogIn;
                    stringaEstrattaDaCella = labelCellLogIn.getString();
                    
                    System.out.println("Riga:" + riga + "nome:" + stringaEstrattaDaCella +"LOGIN="+loginOperatore);
            
                 // Ora costruisco lo StringTokenizer; separatori: virgola e spazio
    				StringTokenizer tokenizer = new StringTokenizer(loginOperatore.toString(), ".");

    				// Ottengo tutte le parole
    				String [] datiLogin = new String[tokenizer.countTokens()];
    				int j = 0;
    				
    				while (tokenizer.hasMoreTokens()) 
    				{
    				   datiLogin[j] = tokenizer.nextToken();
    				   System.out.println("dati token "+j+" = "+datiLogin[j]);
    				   j++;
    				}
    				
    				 
    				
        	    if(stringaEstrattaDaCella.equals(datiLogin[0]+"."+datiLogin[1]+"."))
        	    {
        	    	esitoAccettazioneClient="OK";
        	    	Tempo tempo = new Tempo();
    		        //final Date dataCompleta = tempo.dataCompleta;
    		        String dataEora= new String();
    		        dataEora = Integer.toString(tempo.giorno)+"/"+tempo.mese+"/"+Integer.toString(tempo.anno)+" - "+Integer.toString(tempo.ore)+"."+Integer.toString(tempo.minuti)+"."+Integer.toString(tempo.secondi); 
    		     	Operatore op = new Operatore(datiLogin[0], datiLogin[2],dataEora);
    				op.setDataLogIn(dataEora);
    				table.setValueAt(op.getUsername(),0,0);
    				table.setValueAt(op.getDataLogIn(),0,1);
    				table.setValueAt(op.getTelefono(),0,2);
    				table.setValueAt(op.getPausa(),0,3);
    				table.setValueAt(op.getContatorePause(),0,4);
    				//schermoLog.setText("L'Operatore: "+op.getUsername()+" si è connesso alla Postazione "+op.getTelefono()+" in Data "+dataEora);
    				schermoLog.insert("[Accesso Log-In]: [Operatore: "+op.getUsername()+" Postazione: "+op.getTelefono()+"  Data: " +dataEora+"]\n" , schermoLog.getColumns()); //RIVEDI COLONNE
    				
    				System.out.println("UTENTE CORRISPONDE!! "+riga+" op= "+op.getUsername()+" login= "+loginOperatore);
    		      				
    				break;
        	    }
        	    else
        	    {
        	    	esitoAccettazioneClient="DATI_ERRATI";
        	    	Tempo tempo = new Tempo();
    		        //final Date dataCompleta = tempo.dataCompleta;
    		        String dataEora= new String();
    		        dataEora = Integer.toString(tempo.giorno)+"/"+Integer.toString(tempo.mese)+"/"+Integer.toString(tempo.mese)+"/"+Integer.toString(tempo.anno)+" - "+Integer.toString(tempo.ore)+"."+Integer.toString(tempo.minuti)+"."+Integer.toString(tempo.secondi); 
        	    	//schermoLog.setText("Fallito un Log-In! [Postazione: "+datiLogin[2]+"  Data: " +dataEora+"] ...Conosci "+datiLogin[0]+"?" );
        	    	schermoLog.insert("[Negato Log-In]: [Postazione: "+datiLogin[2]+"  Data: " +dataEora+"] ...Conosci "+datiLogin[0]+"?" , schermoLog.getColumns());
        	    	System.out.println("UTENTE NON CORRISPONDE");
        	    }
        	    riga++;
        	    }
        	    out.writeBytes(esitoAccettazioneClient);
        	    out.flush();
             }
            
             out.close();
             in.close();
             System.out.println("Ho ricevuto una chiamata di chiusura da:\n"
 			 + clientSocket + "\n");
             clientSocket.close();
  
    	   }    
    	   catch (IOException e) 
       	   {
       	     System.out.println(e);
       	     System.out.println("Errore di Accettare il Client: Errore di Accettazione o Comunicazione");
       	   }
    	   catch (UnknownError e)
    	   {
       	    System.out.println(e);
       	    System.out.println("Errore di Accettare il Client: ERRORE SCONOSCIUTO");
    	   } 
    	   catch (BiffException e) 
    	   {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		
	}
}