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:
Non capisco cosa vogliono dire questi molteplici errore, inoltre anche nella consolle del server compare ciò: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)
Il pezzo di codice dove effettuo il logout è questo: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)
Dove waitThread è: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"); }
Questa è la classe SocketHandler del client:codice:private void waitThread(){ try { t.sleep(500); } catch (InterruptedException ex) { Logger.getLogger(LoginUtente.class.getName()).log(Level.SEVERE, null, ex); } }
Mentre questa è la classe "Messaggio":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); }}}
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: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; }}
Mi sta facendo impazzire questo problemacodice:while((message = (Messaggio) in.readObject()) != null) {, spero riusciate a risolverlo, grazie

, spero riusciate a risolverlo, grazie
Rispondi quotando
