작은 응용 프로그램을 작성하고 있는데 문제가 있음을 발견했습니다. 응용 프로그램 창에서 지연되지 않고 하나 (나중에는 아마도 두 가지) 메서드 (이 메서드는 무언가를로드하고 결과를 반환 함)를 호출해야합니다.새 스레드에서 메서드를 호출하는 쉬운 방법
나는 Executor
또는 Callable
과 같은 클래스를 찾았지만 어떻게 처리 할 수 있는지 이해하지 못합니다.
해결책을 올리시겠습니까? 도움이 될만한가?
모든 조언을 주셔서 감사합니다.
편집 : 방법 MUST가 결과를 반환. 이 결과는 매개 변수에 따라 다릅니다. 이 같은 뭔가 :
public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
return webClient.getPage(page);
}
이 방법은 8-10 초 동안 작동합니다. 이 메서드를 실행하면 스레드를 중지 할 수 있습니다. 하지만 매 2 분마다이 방법을 호출해야합니다.
편집 : (내가 캐치 블록에서 return null
을 넣어 경우에도) 내가 다시 오류가이 코드
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;
}
}
: 나는이와 코드를 편집했다.
['Executor'] (http://docs.oracle. com/javase/7/docs/api/java/util/concurrent/Executor.html) 및 ['ExecutorService'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent /ExecutorService.html)에는 javadoc에 예제가 있습니다. 그리고 공식 튜토리얼의 * 동시성 * 스레드에 대한 [주제] (http://docs.oracle.com/javase/tutorial/essential/concurrency/exinter.html). 그것이 내가 시작하는 곳입니다. 해당 자료에서 * 특정 * 항목을 이해하지 못했거나 해당 정보를 사용하는 데 어려움이있는 경우 새로운 질문을해야합니다. – millimoose
나는 예를 보았고, 나는 원하는 것을 성취 할 수 없었다. – Sk1X1
I * think * 당신이 찾고있는 것 ['ExecutorService.submit()'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#submit (Callable')을 가지고 있으므로, 관련 클래스/메소드의 문서에 초점을 맞 춥니 다. 'submit()'은 결과를 사용할 수있을 때 UI를 업데이트하는 것과 같은 일을하게 해주는'Future '을 반환해야합니다. –
millimoose