web-dev-qa-db-fra.com

ce qui a causé l'IOException et le tuyau cassé

Mon AVD est de l'API 15, je ne sais pas pourquoi, mais le message suivant continue de s'afficher chaque fois que je lance une application sur un émulateur. Il ne semble pas avoir causé de problème, à l'exception du message d'erreur dans la console.

[2012-06-17 00:03:26 - ddmlib] Broken pipe
Java.io.IOException: Broken pipe
    at Sun.nio.ch.FileDispatcher.write0(Native Method)
    at Sun.nio.ch.SocketDispatcher.write(SocketDispatcher.Java:47)
    at Sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.Java:122)
    at Sun.nio.ch.IOUtil.write(IOUtil.Java:93)
    at Sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.Java:352)
    at com.Android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.Java:213)
    at com.Android.ddmlib.Client.sendAndConsume(Client.Java:575)
    at com.Android.ddmlib.HandleHeap.sendREAQ(HandleHeap.Java:348)
    at com.Android.ddmlib.Client.requestAllocationStatus(Client.Java:421)
    at com.Android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.Java:837)
    at com.Android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.Java:805)
    at com.Android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.Java:765)
    at com.Android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.Java:652)
    at com.Android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.Java:44)
    at com.Android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.Java:580)

Quelle pourrait-être la cause?

43
manuzhang

Si quelqu'un utilise à la fois Eclipse et le studio Android, cette erreur sera générée par Eclipse. Donc, même si vous sélectionnez le périphérique via DDMS, cette erreur sera générée.

31
Abhishek Patidar

Ancienne question, mais toujours d'actualité et je n'ai vu aucune autre réponse contenant ces informations:

Pour moi, cela s'est produit lorsqu'un autre Eclipse fonctionnait en même temps, avec DDMS en concurrence sur le même socket que celui-ci essayant de se connecter au périphérique Android.

La solution consistait à fermer l'autre Eclipse. J'espère que ça aide quelqu'un.

Mettre à jour: Une meilleure solution consiste probablement à modifier le port DDMS de l’autre Eclipse en un élément que vous n’utilisez pas. Donc, c'est hors de la course.

12
Amir Uval

Cela m'est arrivé lorsque monitor et Eclipse ADT étaient ouverts. Essayez de fermer tous les éléments liés à Android, puis effectuez un adb kill-server && sleep 5 && adb devices puis relancez votre outil (Eclipse/Ant/AS).

6
kizzx2

'Tube cassé' signifie que vous avez écrit des données sur une connexion déjà fermée par l'homologue. Solution: ne pas. C'est essentiellement une erreur de protocole d'application.

5
user207421

Je suppose que le client (Eclipse) communique avec le serveur (votre émulateur) par le protocole Pipe (ce protocole est bien connu pour communiquer deux processus sur le même ordinateur).

Le canal de communication peut être cassé parfois. (Il y a plus de 100 raisons possibles pour cela)

Pour résoudre ce problème: redémarrez l'émulateur (AVD). Peut-être devrez-vous attendre un instant (~ 1min ??) pour qu'Eclipse puisse restaurer le canal Pipe et que Log Cat revienne. Sinon, redémarrez Eclipse et l'émulateur pour supprimer cette erreur.

4
Hiep

La raison la plus courante pour un "tuyau cassé" est le fait qu’une machine (d’une paire communiquant via une prise) a fermé son extrémité de la prise avant la fin de la communication. Environ la moitié de ceux-ci étaient dus au fait que le programme communiquant sur ce socket était terminé.

Si le programme qui envoie des octets les envoie et arrête immédiatement le socket ou s’arrête lui-même, il est possible que le socket cesse de fonctionner avant que les octets aient été transmis et lus.

Essayez de mettre des pauses n'importe où lorsque vous fermez le socket et avant de permettre au programme de se terminer pour voir si cela peut vous aider.

Pour votre information: "pipe" et "socket" sont des termes qui sont parfois utilisés de manière interchangeable.

2
Suresh Parmar

J'ai remarqué que cela se produisait fréquemment (toutes les 5 minutes environ) récemment ... La fréquence semblait augmenter si j'avais à la fois un périphérique physique et un émulateur en cours d'exécution.

Arrêter l’émulateur et utiliser uniquement le périphérique physique pour le débogage l’empêchait de se produire aussi souvent; maintenant, je ne le vois plus qu’une ou deux fois par jour.

Pour le résoudre quand cela se produit, vous n'avez pas besoin de fermer l'émulateur ni de redémarrer le périphérique - l'activation et la désactivation du mode de débogage USB devrait le réafficher sous adb.

2
Ben Pearson

Je lutte avec ce problème depuis longtemps. Chaque fois que je voulais déboguer une application mobile Android avec l'outil de débogage de Chrome, je me déconnectais toutes les 5 minutes.

J'ai découvert que la cause de ceci est en effet un autre processus utilisant la connexion au téléphone mobile qui s'exécute dans le système d'exploitation qui interrompt la communication entre le téléphone mobile et le système d'exploitation.

J'utilisais Macbook Pro et j'utilisais le débogueur IntelliJ IDEA + Transfert de fichiers Android (je ne savais pas que cela tournait derrière) et l'outil de débogage de Chrome. Lorsque j'ai fermé le processus de transfert de fichiers Android avec l'outil "Moniteur d'activité", tout fonctionnait bien, plus aucune déconnexion entre le téléphone portable et le système d'exploitation. Ma suggestion est de toujours vérifier si vous utilisez un autre processus Android.

1
Amir Al

Au cas où quelqu'un d'autre ne trouverait aucune solution à cela. Dans eclipses Neon, cela est arrivé quand j'avais deux jars DDMS dans le répertoire plugins. J'ai eu les andmore.ddms.jar et com.Android_ddms.jar. La suppression de l’un corrige l’erreur. Je suppose qu’ils se font concurrence pour se connecter au même port.

0
Bantu

J'utilisais Android Studio et DDMS. La fermeture de DDMS a résolu le problème pour moi.

Le redémarrage d'Android Studio n'a eu aucun impact.

0
Varun Bhatia

le redémarrage de l'appareil Android a résolu mon problème

0
Mr.Ghamkhar