[Java] Comprensione frammento codice

nonemaitroppotardi1
Salve a tutti.
Sto cercando di capire il codice di un programma da ristrutturare.
Uno (dei tanti) punti oscuri è questo:
....
try { Thread.sleep(100); }
cacth (InterruptedException e) {
e.printStackTrace();
}
......
Che funzione ha questo frammento di codice?
Ringrazio in anticipo a chi mi darà un aiuto.

Risposte
mark971
Premetto che non conosco il java, ma ciò riguarda le eccezioni argomento che è bene studiarsi :)
In pratica la prima riga esegue Thread.sleep(100);, ma essendo nel blocco try nel caso avvenga un'eccezione (in questo caso l'eccezione è InterruptedException [dovrebbe essere quando si interrompe l'esecuzione del programma premendo control + c] esegue il metodo printStackTrace(); nella classe e [la classe dell'eccezione]) viene eseguito il blocco cacth dell'eccezione.
Spero di essere stato comprensibile :)

nonemaitroppotardi1
"mark97":
Premetto che non conosco il java, ma ciò riguarda le eccezioni argomento che è bene studiarsi :)
In pratica la prima riga esegue Thread.sleep(100);, ma essendo nel blocco try nel caso avvenga un'eccezione (in questo caso l'eccezione è InterruptedException [dovrebbe essere quando si interrompe l'esecuzione del programma premendo control + c] esegue il metodo printStackTrace(); nella classe e [la classe dell'eccezione]) viene eseguito il blocco cacth dell'eccezione.
Spero di essere stato comprensibile :)

Intanto grazie per la risposta!
Per quanto riguarda l'eccezione, se non ho capito male la procedura dovrebbe essere questa:
"Prova (try) ad eseguire il metodo Thread.sleep(100). Nel caso succeda un imprevisto (eccezione) esegui printStakTrace()".
Ho capito bene?
Mi resta però da capire che funzione svolgano i metodi Thread.sleep(100) e printStakTrace. Ma immagino che posso banalmente consultare la documentazione java...

apatriarca
Che provenienza ha questo programma? Perché lo devi ristrutturare?

Thread.sleep(100) mette in pausa l'esecuzione del thread corrente per 100ms per poi ripartire dalla riga successiva del codice. Durante questo intervallo di tempo altri thread potrebbero però interrompere l'esecuzione del thread in pausa. In questo caso viene allora lanciata una eccezione di tipo InterruptedException per informare il thread che è stata richiesta la sua interruzione. Normalmente con questa eccezione si dovrebbero liberare le risorse allocate e poi terminare, ma immagino che l'autore del codice postato abbia fatto inserire quel codice automaticamente dal proprio IDE per "zittire" il warning corrispondente.

nonemaitroppotardi1
"apatriarca":
Che provenienza ha questo programma? Perché lo devi ristrutturare?

Thread.sleep(100) mette in pausa l'esecuzione del thread corrente per 100ms per poi ripartire dalla riga successiva del codice. Durante questo intervallo di tempo altri thread potrebbero però interrompere l'esecuzione del thread in pausa. In questo caso viene allora lanciata una eccezione di tipo InterruptedException per informare il thread che è stata richiesta la sua interruzione. Normalmente con questa eccezione si dovrebbero liberare le risorse allocate e poi terminare, ma immagino che l'autore del codice postato abbia fatto inserire quel codice automaticamente dal proprio IDE per "zittire" il warning corrispondente.


Grazie per la risposta!
Adesso questa parte del codice mi è più chiara.
Il frammento di codice è parte di un esercizio sull'utilizzo di interfaccia/polimorfisfo. Una prova intercorso per l'esame universitario di Programmazione ad oggetti. In realtà la parte che mi resta oscura, è in che modo interagiscono due classi "Precipitazioni" e "VisualizzatoreMatrice". Ciascuna di queste classi dichiara una variabile d'esemplare dell'altra.
Se hai un attimo di tempo per darci un'occhiata (allego i files) mi faresti una grande cortesia. Ovviamente non ti chiedo di farmi una lezione online, ma solo di indirizzarmi sull'argomento da approfondire per comprenderne i passaggi, magari indicandomi risorse/esempi disponibili sul web.

apatriarca
L'interazione tra le due classi è in realtà più semplice di quanto possa sembrare. Tutta l'interazione è gestita dalla classe Precipitazioni. Il ciclo principale dell'applicazione si trova infatti nel metodo eseguiSimulazione che, ad ogni iterazione del ciclo interno, simula nuovi dati e chiede all'istanza di VisualizzatoreMatrice di stamparli sullo schermo. Stai usando un qualche tipo di manuale?

nonemaitroppotardi1
Come testo di riferimento Cay Horstmann, dal quale ho svolto un gran numero di esercizi. Il materiale fornito dal prof è soprattutto teoria, anche se ben fatto (Uninettuno). Però non ho trovato mai questo tipo di impostazione. Forse è il tipo di problema da risolvere che richiede questa soluzione? La necessita di seguire l'evoluzione di un evento in tempo reale?

apatriarca
È importante comprendere che in programmazione non esiste una soluzione unica ad un problema. Anzi, ne esistono tantissime e sono normalmente tutte più o meno valide. Quella proposta dal tuo professore non è l'unica soluzione possibile. Il ciclo avrebbe per esempio potuto essere incluso nel main e Precipitazioni passato come parametro al metodo che visualizza i risultati. In questo modo nessuna delle due classi avrebbe avuto bisogno di memorizzare un riferimento all'altra classe. Oppure, avrebbe potuto esserci una ulteriore classe che controllava il ciclo principale.

nonemaitroppotardi1
Penso di aver bisogno di approfondire meglio i concetti di base, visto che il codice così com'è mi risulta ancora incomprensibile. Comunque grazie per le risposte.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.