2014-06-24 6 views
-1

Je suis nouveau à JAVA et essayait d'échanger les objets entre le client et le serveur en utilisant readObject() mais il affichait incompatible types : object cannot be converted to ChatData. Pourquoi l'erreur s'est-elle produite et comment résoudre ce problème? S'il vous plaît dites-moi comment cela fonctionne.types incompatibles: objet ne peut pas être converti en ChatData

` Socket socket = new Socket("127.0.0.1", 3000); 
    ObjectOutputStream clientWriter; 
    ObjectInputStream clientReader; 
    try { 
     clientWriter = new ObjectOutputStream(socket.getOutputStream()); 
     clientReader = new ObjectInputStream(socket.getInputStream()); 

     ChatData clientOutputData = new ChatData("Hello! This is a message from the client number ", socket.getInetAddress()); 
     clientWriter.writeObject(clientOutputData); 

     ChatData clientInputData = clientReader.readObject(); //Here is the error and the ChatData is another class. 

     try { 
      // do processing 
      Thread.sleep(2000); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } catch (IOException ex) { 
     Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      if (clientReader != null) { 
       clientReader.close(); 
      } 
      if (clientWriter != null) { 
       clientWriter.close(); 
      } 
      socket.close(); 
     } catch (IOException ex) { 
      System.err.println("Couldn't close the connection succesfully"); 
      Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
    Thread.sleep(15000); 
    } 
} 
+0

est-ce que cela fait couler le travail 'ChatData'? 'ChatData clientInputData = (ChatData) clientReader.readObject();' –

+0

Oui, cela a fonctionné. Mais pourquoi est-ce nécessaire de le jeter? – DawnEagle999

+0

parce que java est un langage de programmation typé statique et fort, donc le casting implicite (ce que vous faisiez) est un gros non non pour le compilateur. –

Répondre

2

Vous devriez jeter le résultat de readObject() à la classe nécessaire explicitement puisque le type de retour de readObject est Object:

ChatData clientInputData = (ChatData) clientReader.readObject(); 

vous pouvez également l'envelopper dans le bloc try-catch, dans ce cas vous serez en mesure de gérer ClassCastException erreur:

try { 
    ChatData clientInputData = (ChatData) clientReader.readObject(); 
} catch (ClassCastException e){ 
    //handle error 
} 

Et encore un conseil: utilisez IDE tel un Intellij IDEA ou Eclipse, ils vous en avertiront avant la compilation.

3

readObject() La méthode renvoie un objet de type objet.

Vous devez convertir l'objet reçu au type souhaité.

ChatData clientInputData = clientReader.readObject(); //Here is the error and the ChatData is another class. 

Solution:

ChatData clientInputData = (ChatData) clientReader.readObject(); 

Vous devriez également vérifier si l'objet reçu est de ce type que vous voulez, sinon une ClassCastException pourrait être levée.

Object clientInputData = clientReader.readObject(); 
ChatData convertedChatData = null; 
if(clientInputData instanceof ChatData) { 
    convertedChatData = (ChatData) clientInputData; 
} 
Questions connexes