Niente, eseguendo delle funzioni in altre classi, non mi si interrompe.
O meglio, mi avverte che ci ha messo più tempo ma le funzioni continuano a lavorare lo stesso, chiaramente le ho richiamate nel codice con il Time To Live..
Per capirci, se metto un tempo di vita di mezzo secondo, mi viene detto che non si è finito il lavoro in tempo, ma aspettando qualche secondo, poi mi viene caricata l'immagine e le informazioni dalla funzione comunque...
codice:
class Task implements Callable<String> { // Codice con tempo massimo di esecuzione
@Override
public String call() throws Exception {
Thread.sleep(4000); // Qui lavoro, ipotizzo molto codice
String Temp1 = FText.getText(); // Titolo da cercare
if(!Temp1.equals("")){ // Controllo sia inserito qualcosa
String Temp = Temp1.replaceAll(" ", "+"); // Sostituisco gli spazi con il + per la ricerca
String Url = "http://www.imdbapi.com/?t=" + Temp; // Indirizzo per la ricerca film
try {
ImageIcon icon = new ImageIcon("Loading.gif"); // Icona di caricamento
Img.setIcon(icon);
// DatiFilm è di tipo Film, e il costruttore riceve un array di stringhe da 0 a 28 elaborato
DatiFilm = new Film(ElabFilm.downloadFromUrl (new URL (Url), "Mozilla/5.0")); // Popolo il film
StampaRic(DatiFilm); // Mostro il risultato della ricerca
Action.setEnabled(true); // Ora posso fare una immissione dati nel db e abilito il tasto
} catch (MalformedURLException e1) { // Se c'è qualche problema di url...
ImageIcon icon = new ImageIcon("BaseFilm.jpg");
Img.setIcon(icon);
showMessage("The service is unavailable.", "HTTP Error 503.", JOptionPane.ERROR_MESSAGE);
} catch (IOException e1) { // ... o di lavoro con i dati...
ImageIcon icon = new ImageIcon("BaseFilm.jpg");
Img.setIcon(icon);
showMessage("The service is unavailable.", "HTTP Error 503.", JOptionPane.ERROR_MESSAGE);
}
}
return "Eseguito il codice!";
}
}
public void actionPerformed (ActionEvent e){ // ActionEvent Menu
if (e.getSource() == Ric) { // Se Clicco la ricerca film
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(new Task());
try {
System.out.println("Iniziato..");
System.out.println(future.get(1/2, TimeUnit.SECONDS)); // Tempo di vita del codice
System.out.println("Finito in tempo!");
} catch (TimeoutException | InterruptedException | ExecutionException e1) {
System.out.println("Terminato non in tempo!");
}
executor.shutdownNow();
}
}