PDA

View Full Version : [Java] Thread e propagazione eccezioni


Soel
07-04-2009, 10:50
Salve a tutti.
Avrei un problema con un programma client multithread. Ho due classi: una classe contenente il while...true che genera i thread, e la classe thread stessa. Vorrei fare in modo che, quando uno dei thread rileva un'eccezione EOFException (corrispondente alla caduta del server), essa venga propagata alla classe chiamante (quella con il while...true) in modo tale che il ciclo infinito venga interrotto con un return. Tuttavia il problema è che Eclipse non mi permette di aggiungere la clausola throws al metodo run(). Sapreste aiutarmi a implementare il comportamento che desidero?
Grazie anticipatamente per l'aiuto.

british
07-04-2009, 13:23
Salve a tutti.
Avrei un problema con un programma client multithread. Ho due classi: una classe contenente il while...true che genera i thread, e la classe thread stessa. Vorrei fare in modo che, quando uno dei thread rileva un'eccezione EOFException (corrispondente alla caduta del server), essa venga propagata alla classe chiamante (quella con il while...true) in modo tale che il ciclo infinito venga interrotto con un return. Tuttavia il problema è che Eclipse non mi permette di aggiungere la clausola throws al metodo run(). Sapreste aiutarmi a implementare il comportamento che desidero?
Grazie anticipatamente per l'aiuto.

Nella classe che contiene il while(true) metti una variabile istanza boolean isOk settata inizialmente a true, che controllerai ad ogni iterazione while(isOk) e che nel run() del Thread setterai a false negli stessi casi in cui avresti lanciato l'eccezione.

può andare?


ciao!

british

P.S.
il metodo run() non può lanciare eccezioni (almeno, di tipo checked) in quanto è l'override di un metodo astratto dell'interfaccia java.lang.Runnable che dichiara di non lanciare eccezioni.

PGI-Bis
07-04-2009, 13:28
Puoi usare un Callable (da eseguire con un ExecutorService che ottieni tramite Executors) al posto del Runnable.

Altrimenti predisponi un flag (tipo private volatile boolean execute = true) che controlla il ciclo while. Quando un Thread rileva un'eccezione imposta il flag a false e il ciclo terminerà al passaggio successivo.

Soel
08-04-2009, 19:59
Sono riuscito a risolvere con un flag, grazie mille!