Salve a tutti,
ho questa situazione:
Classe Client:
public class Client {
...
public void sendAliveMessage(String clientName, DatagramSocket sock, InetAddress addr, int port) throws IOException{
//do something
}
public static void main(String args[]) throws IOException, InterruptedException{
...
Client cl = new Client();
ClientThread clientThread = new ClientThread(cl);
clientThread.start();
while(true){
if(clientThread.isLogged()){
cl.sendAliveMessage(cl.getClientName(), sock, clientThread.getServerAddress(), clientThread.getServerPort());
}
}
}
}
Classe ClientThread:
public class ClientThread extends Thread{
...
private InetAddress serverAddress;
private int serverPort;
private Client client;
private boolean logged;
public ClientThread(Client cl){
client = cl;
logged = false;
}
@Override
public void run(){
...
while(true){
...
serverAddress = InetAddress.getByName(decodedString[0]);
serverPort = Integer.parseInt(decodedString[1]);
logged = true;
...
}
}
public InetAddress getServerAddress() {
return serverAddress;
}
public int getServerPort() {
return serverPort;
}
public boolean isLogged(){
return logged;
}
}
Ho segnato con i ... le istruzioni non attinenti al problema.
Il mio desiderio è che che l'esecuzione del while del main (classe Client) entri in quell'if nel momento in cui nel thread viene settato a true il suddetto boolean.
Purtroppo noto che ciò non avviene:
Stampando infatti il valore di clientThread.isLogged() nel ciclo while il risultato è sempre false.
Commentando l'if ho notato che invece i parametri clientThread.getServerAddress() e clientThread.getServerPort() vengono correttamente passati al main.
Idee? Forse conoscete un modo migliore per passare parametri dal thread alla classe chiamante?