La fonction suivante s'exécute dans son propre thread :
private void doSendData()
{
try {
//writeToFile(); // just a temporary location of a call
InetAddress serverAddr = InetAddress.getByName(serverAddress);
serverAddr.wait(60000);
//Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, portNumber);
socket.setSoTimeout(3000);
try {
//Log.d("TCP", "C: Sending: '" + message + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
String message = packData();
out.println(message);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
connectionAvailable = true;
} catch(Exception e) {
Log.e("TCP", "S: Error", e);
connectionAvailable = false;
} finally {
socket.close();
announceNetworkAvailability(connectionAvailable);
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
announceNetworkAvailability(connectionAvailable);
}
}
Lorsque l'exécution atteint la ligne serverAddr.wait(60000)
il déclenche une exception :
java.lang.IllegalMonitorStateException: object not locked by thread before wait()
Quelqu'un sait-il comment verrouiller un objet ou une fonction afin d'empêcher la concurrence ? J'ai essayé d'ajouter un objet Lock :
private final Lock lock = new ReentrantLock();
et la ligne
boolean locked = lock.tryLock();
au début de la fonction mais cela n'a pas fonctionné.