Salve, utilizzo netbeans 8.0 e sto facendo un programma client-server, il problema che si presenta è quando l'user fa il logout oppure quando voglio eliminare un utente dal database ( lo elimina dal database ma si presenta l'errore), attraverso la gui.
Io penso sia un problema di deserializzazione, poichè invece il login o la registrazione dell'utente funziona. L'errore in consolle è sempre diverso, o alcune volte non compare e va in loop il programma; alcuni di questi errori sono:

codice:
 java.io.UTFDataFormatException
at java.io.ObjectInputStream$BlockDataInputStream.readUTFSpan(ObjectInputStream.java:3125)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3050)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2863)
at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1070)
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:671)
at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:828)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1599)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1335)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at cavonline_client.Connessione.SocketHandler.run(SocketHandler.java:46)
at java.lang.Thread.run(Thread.java:724)

Exception in thread "Thread-3" java.lang.InternalError
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1590)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1335)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at cavonline_client.Connessione.SocketHandler.run(SocketHandler.java:46)
at java.lang.Thread.run(Thread.java:724)

java.io.StreamCorruptedException: invalid type code: 49    
at java.io.ObjectInputStream$BlockDataInputStream.readBlockHeader(ObjectInputStream.java:2507)    
at java.io.ObjectInputStream$BlockDataInputStream.refill(ObjectInputStream.java:2542)    
at java.io.ObjectInputStream$BlockDataInputStream.read(ObjectInputStream.java:2614)   
at java.io.ObjectInputStream$BlockDataInputStream.readByte(ObjectInputStream.java:2763)    
at java.io.ObjectInputStream$BlockDataInputStream.readUTFChar(ObjectInputStream.java:3157)   
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3054)    
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2863)    
at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1070)    
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:671)    
at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:828)    
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1599)    
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1515)    
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1335)    
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)    
at cavonline_client.Connessione.SocketHandler.run(SocketHandler.java:46)    
at java.lang.Thread.run(Thread.java:724)
Non capisco cosa vogliono dire questi molteplici errore, inoltre anche nella consolle del server compare ciò:
codice:
java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2597)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1316)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at cavonline_server.Connessione.Server$SocketHandler.run(Server.java:152)
at java.lang.Thread.run(Thread.java:724)
Il pezzo di codice dove effettuo il logout è questo:
codice:
String s = jButton3.getText();        
       //creato il thread corrente
        t = Thread.currentThread();
        
   
        if(s.equals("Logout")) {
   
            jButton3.setText("Login");
            jTabbedPane1.setEnabledAt(3,false);


            //status disattivo=0
            int valu=0;
            
            clientConn.query(new Messaggio("update Utenti set Status='"+valu+"'where Email='"+email.getText()+"'"));
            waitThread();
            
            }
  
        if(s.equals("Login")){
  
            LoginUtente u = new LoginUtente();
            u.setVisible(true);
            jButton3.setText("Logout");
        }
Dove waitThread è:
codice:
private void waitThread(){        
try {
            t.sleep(500);
        } catch (InterruptedException ex) {
            Logger.getLogger(LoginUtente.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
Questa è la classe SocketHandler del client:
codice:
public class SocketHandler implements Runnable {
private static ObjectInputStream in;
public SocketHandler(Socket sock) { 
   try {       
         SocketHandler.in = new ObjectInputStream(sock.getInputStream());    
   } catch (IOException ex) {        
              Logger.getLogger(SocketHandler.class.getName()).log(Level.SEVERE, null, ex);    
   }}
 
  @Overridepublic void run() { 
   try {      
        Messaggio message = null;       
        System.out.println("Messaggio arrivato");  
     
        while((message = (Messaggio) in.readObject()) != null) {  
                 ClientConn.receive(message);       
         }    } catch (IOException | ClassNotFoundException ex) {                
                 Logger.getLogger(SocketHandler.class.getName()).log(Level.SEVERE, null, ex); 
               }}

public void interrupt() {    
         try {        
               SocketHandler.in.close();   
         } catch (IOException ex) {        
              Logger.getLogger(SocketHandler.class.getName()).log(Level.SEVERE, null, ex);  
         }}}
Mentre questa è la classe "Messaggio":
codice:
public class Messaggio implements Serializable{ 
  //client invia un messaggio con stringa   
  public String sql;   
//dopo dal server riceverà un messaggio con un vector (database)  
 public Vector<String> risultati = new Vector();   
 public Messaggio(String sql) {      
           this.sql = sql;   
 }}
Soprattutto l'errore rimanda sempre a questa riga, dicendo che non è possibile fare il cast con Messaggio, eppure nei casi del login e registrazione funziona... :

codice:
while((message = (Messaggio) in.readObject()) != null) {
Mi sta facendo impazzire questo problema , spero riusciate a risolverlo, grazie