मैं छोटा ऐप लिख रहा हूं और अब मुझे एक समस्या मिली है। मुझे ऐप की खिड़की में लगी बिना एक (बाद में शायद दो) विधि (यह विधि कुछ लोड करती है और परिणाम देता है) को कॉल करने की आवश्यकता होती है।नए धागे में कॉल करने का आसान तरीका
मुझे Executor
या Callable
जैसी कक्षाएं मिलीं, लेकिन मुझे समझ में नहीं आता कि उन लोगों के साथ कैसे काम करना है।
क्या आप कोई समाधान पोस्ट कर सकते हैं, जो मेरी मदद करता है?
सभी सलाहओं के लिए धन्यवाद।
संपादित करें: विधि आवश्यक परिणाम लौटाएं। यह परिणाम पैरामीटर पर निर्भर करता है। कुछ इस तरह:
public static HtmlPage getPage(String page) throws FailingHttpStatusCodeException, MalformedURLException, IOException {
return webClient.getPage(page);
}
इस विधि के बारे में 8-10 सेकंड काम करता है। इस विधि को निष्पादित करने के बाद, थ्रेड को रोका जा सकता है। लेकिन मुझे हर 2 मिनट में विधियों को कॉल करने की ज़रूरत है।
संपादित करें: मैं इस के साथ कोड संपादित:
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;
}
}
इस कोड को मैं फिर से त्रुटि मिल (भले ही मैं पकड़ ब्लॉक से बाहर return null
डाल) के साथ।
[ 'Executor'] (http://docs.oracle। कॉम/जावास/7/डॉक्स/एपीआई/जावा/यूज/समवर्ती/एक्जिक्यूटोर.html) और ['एक्जिक्यूटर्स सर्विस '] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent /ExecutorService.html) में javadoc में उदाहरण हैं। और [एक विषय] (http://docs.oracle.com/javase/tutorial/essential/concurrency/exinter.html) आधिकारिक ट्यूटोरियल में * concurrency * थ्रेड पर। यही वह जगह है जहां मैं शुरू करता हूं। यदि आप उन सामग्रियों में कुछ * विशिष्ट * नहीं समझते हैं, या यदि आप उनमें से जानकारी का उपयोग कर अटक गए हैं तो आपको एक नया प्रश्न पूछना चाहिए। – millimoose
मैंने उदाहरणों को देखा, कड़वा मैं जो हासिल करना चाहता हूं उसे प्राप्त नहीं कर सकता। – Sk1X1
मैं * सोचता हूं * आप जो खोज रहे हैं ['execorService.submit()'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#submit (java.util.concurrent.Callable)) 'कॉल करने योग्य' के साथ, इसलिए उन और संबंधित कक्षाओं/विधियों के लिए प्रलेखन पर ध्यान केंद्रित करें। 'सबमिट()' को 'भविष्य ' वापस करना चाहिए जो परिणाम उपलब्ध होने पर आपको कुछ करने की अनुमति देगा (जैसे यूआई अपडेट करें)। –
millimoose