Tôi đang viết ứng dụng nhỏ và bây giờ tôi đã phát hiện ra một vấn đề. Tôi cần phải gọi một (sau đó có thể là hai) phương pháp (phương pháp này tải một cái gì đó và trả về kết quả) mà không bị tụt hậu trong cửa sổ ứng dụng.Cách dễ dàng để gọi phương thức trong chủ đề mới
Tôi đã tìm thấy các lớp học như Executor
hoặc Callable
, nhưng tôi không hiểu cách làm việc với những lớp đó.
Bạn có thể vui lòng đăng bất kỳ giải pháp nào giúp tôi không?
Cảm ơn mọi lời khuyên.
Chỉnh sửa: Phương pháp PHẢI trả lại kết quả. Kết quả này phụ thuộc vào parametrs. Một cái gì đó như thế này:
public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
return webClient.getPage(page);
}
Phương pháp này hoạt động khoảng 8-10 giây. Sau khi thực thi phương thức này, luồng có thể được dừng lại. Nhưng tôi cần phải gọi các phương pháp sau mỗi 2 phút.
Edit: tôi sửa mã với điều này:
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;
}
}
Với mã này, tôi nhận được lỗi một lần nữa (thậm chí nếu tôi đặt return null
ra khỏi bắt khối).
[ 'Executor'] (http://docs.oracle. com/javase/7/docs/api/java/util/concurrent/Executor.html) và ['ExecutorService'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent /ExecutorService.html) có các ví dụ trong javadoc. Và [một chủ đề] (http://docs.oracle.com/javase/tutorial/essential/concurrency/exinter.html) trên chuỗi * concurrency * trong hướng dẫn chính thức. Đó là nơi tôi bắt đầu. Bạn nên hỏi một câu hỏi mới nếu bạn không hiểu điều gì đó * cụ thể * trong những tài liệu đó, hoặc nếu bạn đang mắc kẹt khi sử dụng thông tin trong đó. – millimoose
Tôi thấy các ví dụ, nụ tôi không thể đạt được những gì tôi muốn. – Sk1X1
Tôi * nghĩ * những gì bạn đang tìm kiếm ['ExecutorService.submit()'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#submit (java.util.concurrent.Callable)) với một 'Callable', vì vậy hãy tập trung vào tài liệu cho các lớp và các phương thức liên quan. 'submit()' sẽ trả về một 'Tương lai ' mà sẽ cho phép bạn làm điều gì đó (như cập nhật giao diện người dùng) khi kết quả có sẵn. –
millimoose