Java.lang.IllegalMonitorStateException: objeto no bloqueado por el hilo antes de esperar ()

Pero estoy sincronizando en el objeto 'roster' dondequiera que sea new'ed. Cómo ?

El código ofensivo:

public Roster getRoster() { if (roster == null) { return null; } if (!roster.rosterInitialized) { try { synchronized (roster) { roster.reload(); long waitTime = SmackConfiguration.getPacketReplyTimeout(); long start = System.currentTimeMillis(); while (!roster.rosterInitialized) { if (waitTime <= 0) { break; } roster.wait(waitTime); long now = System.currentTimeMillis(); waitTime -= now - start; start = now; } } } catch (InterruptedException ie) { // Ignore. } } return roster; } 

¿Con "obtiene new'ed" significa que crear un nuevo objeto de lista?

¿Está seguro de que está sincronizando correctamente? La sincronización ocurre en instancias , no en variables . Así que si lo haces por ejemplo

 synchronized(roster) { roster = new Roster(); // do something } 

Entonces sólo se sincronizó con la antigua , no con la nueva roster .

Por lo que el código siguiente debería producir el mismo error:

 Roster roster = new Roster(); Roster othervariable = roster; synchronized(othervariable) { roster = new Roster(); // create a new roster othervariable.wait(1000); // OK, since synchronized with this instance! roster.wait(1000); // NOT OK, not synchronized with *new* roster! } 

La sincronización no ocurre en el nombre de la variable , sino en el contenido . Si sobrescribe el contenido, no volver a sincronizar con el nuevo valor!

  • ¿Cómo decirle a ProGuard que ofusque métodos y nombres de clase?
  • ¿Cómo implementar Google Maps dentro de un fragmento y usar el objeto GoogleMap?
  • Cómo saltar valores en índices particulares en el gráfico de líneas utilizando MPAndroid Chart Library?
  • Android youtube API reproduce dos o más jugadores de Youtube en una actividad principal
  • ListView y Tabwidget en Fragmento
  • CSVReader y InputStream
  • Actualización de Android de ListView
  • No se puede conectar a los puntos finales gae locales del emulador de Genymotion
  • Retrofit2 Condición de manejar cuando el código de estado 200 pero la estructura de json diferente a la clase de datamodel
  • Android Frame by Frame Problema de animación en elementos en un CursorAdapter
  • Cómo quitar todas las devoluciones de llamada de un controlador?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.