2010-11-08 17 views
5

में सिस्टम ट्रे के लिए एकल उदाहरण बनाना मैं जावा में बनाए गए डेस्कटॉप एप्लिकेशन में काम कर रहा हूं। हम एप्लिकेशन के विंडोज संस्करण (विंडोज़ ओएस पर चलने के लिए) के लिए काम कर रहे हैं। जब हम हमारे आवेदन चलाने के लिए, यह systemtray रूपजावा

SystemTray tray = SystemTray.getSystemTray(); 

का उपयोग कर रहा सिस्टम ट्रे, जो मैं अनुप्रयोग का मुख्य वर्ग में बनाने रहा हूँ की एक उदाहरण बनाने रहा द्वारा डेस्कटॉप पर एक ट्रे आइकन पैदा करता है।

मैं अपने आवेदन के लिए exe बना रहा हूँ। मेरी समस्या यह है कि जब मैं अपने आवेदन की exe फ़ाइल चला रहा हूं, तो यह हर बार ट्रे आइकन बनाता है।

मैं अपने एप्लिकेशन में केवल एक ट्रे आइकन डेस्कटॉप पर मौजूद हूं और सेवा के रूप में चल रहा हूं। जब एप्लिकेशन अनइंस्टॉल किया जाता है, तो यह आइकन केवल हटा दिया जाना चाहिए। इसे पृष्ठभूमि में सेवा के रूप में चलाया जाना चाहिए।

मुझे कोई रास्ता नहीं मिल रहा है जो मुझे सेवा के रूप में अपना आवेदन चलाने में मदद करेगा और पृष्ठभूमि में केवल एक ही उदाहरण चलाना चाहिए।

मैं एक सेवा के रूप में एक ट्रे आइकन बनाकर अपना आवेदन चलाने के लिए चाहता हूं और एक उदाहरण होना चाहिए। कृपया इस मुद्दे में मुझे मार्गदर्शन करें।

अग्रिम में आपके सभी मूल्यवान सुझावों के लिए धन्यवाद।

उत्तर

2

जैसा कि मुदासिर ने कहा था, जब आप अपना प्रोग्राम शुरू करते हैं तो आपको एक चेक जोड़ना चाहिए जो आपके ऐप का एक और चलने वाला उदाहरण ढूंढने का प्रयास करता है। यह स्टार्टअप पर एक विशिष्ट फ़ाइल बनाकर और इसे बंद करने पर इसे हटाकर किया जा सकता है। यदि आप अपना ऐप शुरू करते समय फ़ाइल पहले से मौजूद है, तो इसका मतलब है कि एक और उदाहरण चल रहा है। आप इंटर-प्रोसेस संचार का भी उपयोग कर सकते हैं, लेकिन यह एक साधारण फ़ाइल से अधिक कठिन होगा।

"सेवा" भाग के लिए, आप स्टार्टअप पर मुख्य विंडो छुपा सकते हैं, इसलिए आपका ऐप चलाएगा जैसे कि यह एक विंडोज सेवा थी।

+0

उत्तर देने के लिए धन्यवाद मुझे उम्मीद है कि यह मेरे लिए काम करेगा। कृपया सेवा भाग में कुछ और बताएं। – Toman

+0

मुझे नहीं लगता कि जावा में एक विंडोज सेवा बनाना संभव है, जिसका मतलब है कि एक सेवा जो स्वचालित रूप से स्टार्टअप पर चल सकती है, और जिसे अन्य मानक विंडोज सेवाओं की तरह प्रबंधित किया जा सकता है। लेकिन आप रजिस्ट्री में एक प्रविष्टि जोड़कर कुछ ऐसा कर सकते हैं (Google "विंडोज स्वचालित स्टार्टअप" जैसे कुछ)। जब आपका प्रोग्राम लॉन्च किया जाता है, तो यह जांच करेगा कि कोई और उदाहरण चल रहा है या नहीं। यदि नहीं, तो यह आपके जैसे सिस्टम ट्रे आइकन बनाएगा, और इसकी खिड़कियों को छुपाएगा (यदि यह वास्तव में किसी प्रकार का जीयूआई उपयोग कर रहा है)। –

1

अपना आवेदन एकल उदाहरण बनाएं। और कृपया बताएं कि आप जावा में .EXE फ़ाइल कैसे बना रहे हैं?

+0

मुदासिर का जवाब देने के लिए धन्यवाद। मैं उन्नत इंस्टॉलर का उपयोग कर exe बना रहा हूँ। उन्नत इंस्टॉलर जार फ़ाइलों का उपयोग करता है और जार से exe बनाता है। – Toman

1

एक ट्रे आइकन दिखाई देने के लिए, आपका ऐप चलाना आवश्यक है। यदि आपका ट्रे आइकन दो बार (या अधिक) प्रतीत होता है, तो आपका एप्लिकेशन कई बार चलता है। आपको इसके लिए एक चेक जोड़ना होगा।

आप अपने ऐप को विंडोज सेवा के रूप में नहीं चलाना चाहते हैं, क्योंकि आम तौर पर इन्हें विंडोज डेस्कटॉप तक पहुंच नहीं है।

+0

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

+0

@ मुदासिर इस मामले में उसे दो ऐप्स बनाना चाहिए। विंडोज़ पृष्ठभूमि सेवा के लिए एक और दूसरा जो नेटवर्क से जुड़ता है या अन्यथा। – ZeissS

+0

आपकी टिप्पणियों के लिए धन्यवाद। मेरा आवेदन ऑनलाइन बैकअप लेने के लिए है। यह आपकी चयनित फ़ाइलों का बैकअप लेता है और स्वचालित रूप से सर्वर पर अपडेट करता है, इसलिए इसे पृष्ठभूमि में सेवा के रूप में चलाने की आवश्यकता होती है। मैं एप्लिकेशन के मुख्य वर्ग में सिस्टम ट्रे के लिए एकल उदाहरण बना रहा हूं लेकिन मेरा एप्लिकेशन यह पहचानने में असमर्थ है कि कोई भी उदाहरण पहले से मौजूद है या नहीं। – Toman