2011-08-06 14 views
13

पर एक सेट समय पर जावा विधि चलाना मैं जावा के लिए अपेक्षाकृत नया हूं और मैंने काम करने के लिए एक प्रोजेक्ट लिया है। हालांकि, मैं एक ब्लॉक में चला गया है। मुझे पूरे दिन एक निश्चित समय पर चलाने के लिए एक विधि की आवश्यकता है। मैंने काफी खोज की है लेकिन मुझे ऐसा कुछ भी नहीं मिला है जो ऐसा लगता है कि यह चाल करेगा। मैंने टाइमर क्लास में भाग लिया है लेकिन यह कुछ अंतराल पर चल रहा है। शेड्यूलर क्लास, एक ही मुद्दा प्रतीत होता है। मैं क्वार्ट्ज में भी आया लेकिन मुझे लगता है कि मुझे कुछ और हल्का वजन चाहिए और मैं केवल अंतराल पर चीजें कैसे कर सकता हूं।प्रत्येक दिन

शायद, क्योंकि मैं नया हूं, मुझे कुछ चीजें याद आई हैं जो इन कक्षाओं में मेरी मदद कर सकती हैं, लेकिन मैं वास्तव में अटक गया हूं और कुछ मदद का उपयोग कर सकता हूं।

अगर कोई मुझे कक्षा में इंगित कर सकता है जो दिन के एक निश्चित समय पर कुछ चलाएगा, रोज़ाना (ईवेंट को रद्द करने में सक्षम होने के लिए बोनस अंक), और मुझे दिखाएं कि कक्षा का सही तरीके से उपयोग कैसे करें, यह शानदार होगा !

टीएल; डीआर: एक कक्षा की आवश्यकता है जो दिन के समय में कुछ करता है, अंतराल पर नहीं, क्योंकि कार्यक्रम पूरे दिन कई बार पुनरारंभ किया जा सकता है।

+2

मैंने इस बिंदु को दोबारा पोस्ट करने के लिए एक पोस्ट लिखा है। यह आपकी मदद कर सकता है: http://harryjoy.wordpress.com/2011/07/09/create-a-scheduler-task-in-java/ –

+0

@ हैरी जॉय जो सहायक था। मुझे क्वार्ट्ज –

उत्तर

26

http://oreilly.com/java/archive/quartz.html

import java.util.Calendar; 
import java.util.Date; 
import java.util.Timer; 
import java.util.TimerTask; 

public class ReportGenerator extends TimerTask { 

    public void run() { 
    System.out.println("Generating report"); 
    //TODO generate report 
    } 

} 

class MainApplication { 

    public static void main(String[] args) { 
    Timer timer = new Timer(); 
    Calendar date = Calendar.getInstance(); 
    date.set(
     Calendar.DAY_OF_WEEK, 
     Calendar.SUNDAY 
    ); 
    date.set(Calendar.HOUR, 0); 
    date.set(Calendar.MINUTE, 0); 
    date.set(Calendar.SECOND, 0); 
    date.set(Calendar.MILLISECOND, 0); 
    // Schedule to run every Sunday in midnight 
    timer.schedule(
     new ReportGenerator(), 
     date.getTime(), 
     1000 * 60 * 60 * 24 * 7 
    ); 
    }//Main method ends 
}//MainApplication ends 
+3

+1: मुझे क्वार्ट्ज भी पसंद है। लेकिन इसे बनाम बनाम क्रॉन के साथ कार्य शुरू करने से यह आपकी ज़िम्मेदारी बन जाती है कि ऐप कभी क्रैश नहीं होता है, अगर यह अभी भी दुर्घटनाग्रस्त हो जाता है, तो स्वचालित रूप से पुनरारंभ होता है। – Daniel

+2

ध्यान दें कि यह डीएसटी में बदलाव के बाद टूट गया है! टाइमर फिर एक घंटे देर या तेज चलाएगा, यहां 1 बजे या 11 बजे (यह निर्भर करता है कि गर्मी में शुरू हुआ था और सर्दियों के समय में संक्रमण, या रिवर्स)। – Philipp

+0

मैंने date.set (कैलेंडर.एएम_PM, कैलेंडर.एएम) जोड़ा था; या प्रधान मंत्री ने मुझे सही समय पर काम करने की उम्मीद की थी। –

4

मैं दृढ़ता से सुझाव देता हूं कि यदि संभव हो तो, आपके ओएस के शेड्यूलर का उपयोग करके आपकी स्क्रिप्ट या जावा एप्लिकेशन का सबसे अच्छा तरीका होगा: उदाहरण के लिए, विंडोज़ में * निक्स, या "टास्क शेड्यूलर" में "क्रॉन" ।

+0

के बारे में पता नहीं था, मैं उस सुझाव को दूसरा स्थान दूंगा। सब कुछ क्यों लागू करें, और जावा ऐप को प्रबंधित करने के बारे में चिंता करें? @Eegabooga क्या आप जावा में वास्तव में _need_ करते हैं? लाइटवेट समाधान लागू किए जा सकते हैं यदि आपको उनकी ज़रूरत है, लेकिन यह बहुत अधिक पुनर्विचार कर रहा है और संभवतः उतना मजबूत नहीं होगा। –

+0

आपके उत्तरों के लिए सभी को धन्यवाद। हालांकि, मुझे लगभग 100% यकीन है कि यह जावा के भीतर होना चाहिए। यह ऐसा कार्यक्रम नहीं है जिसे हर रोज एक निश्चित समय पर फिर से लॉन्च करने की आवश्यकता होती है, यह एक ऐसा क्रिया है जो कार्यक्रम करता है। यहां तक ​​कि अगर क्रॉन ऐसा कर सकता है, यह प्रोग्राम मेरे लिए नहीं बल्कि किसी और के लिए है। जो मैं कर रहा हूं वह एक गेम सर्वर के लिए एक प्लगइन है और इस लड़के के सर्वर में प्लगइन हुक है। यदि यह संभव है, तो मैं उसे क्रॉन फाइल भेज सकता हूं, अगर आपको लगता है कि यह काम करेगा, लेकिन याद रखें कि मुझे कार्यक्रम के भीतर चलाने के लिए एक विधि की आवश्यकता है, न कि कार्यक्रम स्वयं (माफ करना अगर वाक्यविन्यास गलत है, अभी भी सीख रहा है) –

+0

ठीक है अब मैं देखता हूं कि मैं क्वार्ट्ज के साथ जावा के माध्यम से एक cronjob चला सकते हैं। –

2

एक संभावना की जाँच के लिए एक बाहरी अनुसूचक उपयोग करने के लिए हो सकता है अधिक जानकारी के लिए TimerTask वर्ग

कोशिश - वांछित सटीकता पर निर्भर करता है। यूनिक्स पर सीआरओएन का उपयोग करें, विंडोज़ पर विंडोज शेड्यूलर का उपयोग करें। यह अच्छी तरह से करने से समय अलग करता है।

आप एक टाइमर का उपयोग कर सकते हैं और एक साधारण वर्ग बना सकते हैं जो वांछित ग्रैन्युलरिटी के आधार पर हर मिनट या 5 मिनट का समय जांचता है। यह बहुत हल्का होगा।