Я делаю приложение чата на Java.
У меня есть класс с именем Client, с несколькими методами, которые могут отправлять запрос на мой сервер и ждать ответа.
Раньше я делал это:
public boolean authenticate(String login, String password) throws ResponseException{
try {
AuthentificationRequest req = new AuthentificationRequest(login,password);
this.out.writeObject(req);
this.out.flush();
Response rep=this.readResponse();
...
Но я меняю способ получения ответов от сервера. Теперь я использую поток с именем ResponseHandler:
public void run() {
// TODO Auto-generated method stub
Response rep = new Response();
try {
while (!Thread.currentThread().isInterrupted()) {
this.isResponseReceived=false;
this.setResponse((Response) in.readObject()) ;
synchronized(this) {
this.isResponseReceived=true;
notify();
}
Это мой новый метод "readResponse":
public Response readResponse(Request req) throws ClassNotFoundException, IOException, InterruptedException {
synchronized(this.responseHandler) {
while(!this.responseHandler.isResponseReceived()) {
this.out.writeObject(req);
wait();
}
}
this.out.flush();
return this.responseHandler.getResponse();
}
А это мой новый код клиента для предыдущего примера:
public boolean authenticate(String login, String password) throws ResponseException{
try {
Response rep = this.readResponse(new AuthentificationRequest(login,password));
Но похоже, что мой код заблокирован в моем цикле ...
Как я могу сделать так, чтобы мой клиент получил ответ потока?
Спасибо за ваш отзыв