Si verifica l'eccezione del titolo alla riga indicata nel commento del codice
codice:

codice:
package jcallremember.server;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import jcallremember.libreria.Credenziali;
import jcallremember.libreria.Operazioni;
import jcallremember.libreria.ClienteDB;
/**
 *
 * @author Pasquale Caloriger
 * Questa Classe implementa un thread Server che fornisce servizi al client
 */
public class ServerWorker implements Runnable{
    private final Socket socket;
    private final Thread worker;
    private  Credenziali login;
    private final InputStream is;
    private final OutputStream os;
    public ServerWorker(Socket socket) throws IOException{
        this.socket=socket;
        this.worker=new Thread(this);
        this.is=this.socket.getInputStream();
        this.os=this.socket.getOutputStream();
    }
    public void start(){
        this.worker.start();
    }
    @Override
    public void run() {
        //Nella prima fase il thread worker legge i dati di login che il client 
        //invia
        if (socket.isConnected()) {
            try {
                ObjectInputStream ois = new ObjectInputStream(is);
                //legge l'oggetto Credenziali inviato dal client
                this.login=(Credenziali)ois.readObject();
                ObjectOutputStream oos=new ObjectOutputStream(this.os);
                //invia al client true se il login è corretto , false
                //altrimenti
                oos.writeBoolean(Database.getInstance().isLoginCorrect(login));
                oos.flush();
                //si mette in attesa di richieste da parte del client
                while(true){
                    //aspetto di leggere un oggetto Operazioni(enum)
                    Operazioni op=(Operazioni)ois.readObject(); //si verifica l'eccezione
                    switch(op){
                        case INSERIMENTO:
                            ClienteDB cliente=(ClienteDB)ois.readObject();
                            Boolean isOk=Database.getInstance().insertCliente(cliente,
                                    login.getUsername());
                            oos.writeBoolean(isOk);
                            oos.flush();                            
                            break;
                        case DOWNLOAD:
                            Object [][]  appuntamenti=Database.getInstance().
                                    downloadAppuntamentiOperatore(this.login);
                            oos.writeObject(appuntamenti);
                            oos.flush();
                            break;
                            
                        
                    }
                }
                   
                    
                
            } catch (IOException | ClassNotFoundException | SQLException ex) {
                Logger.getLogger(ServerWorker.class.getName()).
                        log(Level.SEVERE, null, ex);
            }
            
        }
    }
    
}