Pero me estoy sincronizando en el objeto 'roster' en todos los sitios donde se actualiza. Cómo ?java.lang.IllegalMonitorStateException: objeto no bloqueado por subproceso antes de wait()
El código erróneo:
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;
}
¿Qué hace reload() hacer? – Affe
donde llamaste notifica – Ronnie