Lanciare un thread all'interno di un altro thread
[ Nouvelle discussion
| Répondre au groupe
|
it.comp.java ]
Salve a tutti
Ho un problema con la gestione (molto basilare a dire il vero) del
multithreading in un programma che sto scrivendo.
Vi spiego prima di tutto qualìè il mio obbiettivo:
il programma si collega a Internet, scarica una pagina, la elabora e
restituisce un risultato; queste operazioni possono rikiedere un certo
tempo, quindi tutto il processo l'ho messo in un thread a parte
(utilizzando SwingWorker).
Il problema è che, a volte, le operazioni sulla pagina dovrebbero
iterarsi.....cioè, a partire da quella pagina, devo poi fare altre volte
lo stesso processo.
Io avevo pensato, concettualmente, di avviare (nel caso sia necessario)
un ulteriore thread dall'interno di quello che sta eseguendo...
Solo che non riesco a farlo....
Provo a inviarmi il codice, un poco spiegato:
SwingWorker worker = new SwingWorker<String,Void>(){
@Override
protected String doInBackground() throws Exception {
/* Codice vario per gestire una barra e simili....*/
/* L'operazione principale, quella per cui di fatto sto
usando il thread*/
String plot = getter.getPlotfromTitle();
return plot==null? null : plot;
}
@Override
protected void done(){
try {
String result = get();
enableAll();
busyIconTimer.stop();
statusAnimationLabel.setIcon(idleIcon);
if(result==null){
// Altro codice di gestione....
......
JOptionPane.showMessageDialog(null,"NON TROVATO!");
Vector<String> dym = getter.getDidYouMean();
if(!(dym.isEmpty())){
JFrame mainFrame =
GetPlotsApp.getApplication().getMainFrame();
dymBox = new DidYouMeanDialog(mainFrame, dym);
dymBox.setLocationRelativeTo(mainFrame);
GetPlotsApp.getApplication().show(dymBox);
/* E qui, nel caso una variabile che viene modificata da dymBox
contenesse dei dati,
vorrei avviare un thread UGUALE a quello che è eseguito adesso,
però con i nuovi dati
(in sostanza solo cambierebbero dei
parametri dell'oggetto "getter" ).
Solo che non so come fare per richiamare il thread...ho provato a
inserire qui
una chiamata a doInBackground(), ma dopo essere entrato, non
usciva più....*/
}
}
else{
txtarea.setText(result);
}
} catch (InterruptedException ex) {
Logger.getLogger(GetPlotsView.class.getName()).log(Level.SEVERE, null, ex);
} catch (ExecutionException ex) {
Logger.getLogger(GetPlotsView.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
//Qui avvio il thread.
worker.execute();
Spero di essere stato chiaro....
E soprattutto spero che qualcuno sappia darmi una dritta.....anche se
implica cambiare il programma!!
Grazie a tutti!
Ciaoo

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|