Sto scrivendo una piccola app e ora ho scoperto un problema. Ho bisogno di chiamare uno (più tardi due) metodo (questo metodo carica qualcosa e restituisce il risultato) senza rallentare nella finestra dell'app.Metodo semplice per chiamare il metodo nella nuova discussione
Ho trovato classi come Executor
o Callable
, ma non capisco come lavorare con quelle.
Potete per favore pubblicare qualsiasi soluzione, che mi aiuti?
Grazie per tutti i consigli.
Modifica: Il metodo DEVE restituire il risultato. Questo risultato dipende dai parametri. Qualcosa di simile a questo:
public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
return webClient.getPage(page);
}
Questo metodo funziona circa 8-10 secondi. Dopo aver eseguito questo metodo, il thread può essere fermato. Ma ho bisogno di chiamare i metodi ogni 2 minuti.
Edit: Ho modificato il codice con questo:
public static HtmlPage getPage(final String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
Thread thread = new Thread() {
public void run() {
try {
loadedPage = webClient.getPage(page);
} catch (FailingHttpStatusCodeException | IOException e) {
e.printStackTrace();
}
}
};
thread.start();
try {
return loadedPage;
} catch (Exception e) {
return null;
}
}
Con questo codice ottengo di nuovo errore (anche se ho messo return null
fuori cattura blocco).
[ 'Executor'] (http://docs.oracle. it/javase/7/docs/api/java/util/concurrent/Executor.html) e ['ExecutorService'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent /ExecutorService.html) hanno degli esempi in javadoc. E [un argomento] (http://docs.oracle.com/javase/tutorial/essential/concurrency/exinter.html) sul thread * concurrency * nel tutorial ufficiale. Ecco dove comincio. Dovresti fare una nuova domanda se non capisci qualcosa * specifico * in quei materiali, o se sei bloccato avendo usato le informazioni in loro. – millimoose
Ho visto gli esempi, non posso realizzare quello che voglio. – Sk1X1
I * penso * cosa stai cercando ['ExecutorService.submit()'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#submit (java.util.concurrent.Callable)) con un 'Callable', quindi concentrarsi sulla documentazione per tali classi e metodi/metodi correlati. 'submit()' dovrebbe restituire un 'Future ' che ti permetterà di fare qualcosa (come aggiornare l'interfaccia utente) quando il risultato è disponibile. –
millimoose