जावा डेस्कटॉप अनुप्रयोग: SWT बनाम स्विंग [बंद]


158

मैं दिन में एक वेब डेवलपर हूं और अपना पहला वास्तविक डेस्कटॉप एप्लिकेशन बनाने के बारे में सोच रहा हूं। यह विचार एक ऐसे उपकरण का निर्माण करना है जो एक वेब एप्लिकेशन में बहुत दोहराव वाले कार्य को स्वचालित करता है जहां कोई एपीआई उपलब्ध नहीं है।

मुझे पता है कि मैं जावा का उपयोग करना चाहता हूं। मैंने वेब सामग्री के लिए पहले इसका उपयोग किया था, सिंटैक्स को अच्छी तरह से जानता हूं और चाहता हूं कि एप्लिकेशन को जितना संभव हो उतना आसान क्रॉस क्रॉसफ़ॉर्म किया जाए।

जहाँ मुझे यकीन नहीं है कि अगर मुझे SWT या स्विंग का उपयोग करना चाहिए। जैसा कि मेरे मुख्य दर्शकों ने विंडोज का उपयोग किया है, मैं इसे यथासंभव मूल रूप से देखना चाहता हूं। लिनक्स और मैक को काम करना चाहिए, लेकिन यहां लुक इतना महत्वपूर्ण नहीं है।

तो प्रत्येक UI फ्रेमवर्क, स्विंग या SWT के लिए क्या तर्क हैं?

धन्यवाद।

पुनश्च: मैं ग्रहण का उपयोग करते हुए विंडोज पर विकसित होता हूं। लेकिन नेटबीन्स के साथ खेलने के बारे में सोच रहा था।


मुश्किल प्रश्न। :-) मैं स्विंग के साथ जाऊँगा। लेकिन, उस निर्णय के लिए कोई PRO या CONs नहीं है।
पाब्लो सांता क्रूज़

डुप्लिकेट क्यू। कृपया एसओ पर पहले से पूछे गए स्विंग बनाम एसडब्ल्यूटी क्यू देखें। एफडब्ल्यूआईडब्ल्यू, मैं स्विंग का उपयोग सिर्फ इसलिए करता हूं क्योंकि मैंने उस तरह से सीखा। देशी लुक-एंड-फील लाइब्रेरियाँ हैं (देखें jgoodies लुक्स)
जेसन एस

"एक उपकरण है कि एक वेब अनुप्रयोग में एक बहुत ही दोहराव कार्य स्वचालित बनाता है" - इस पर कोई जानकारी? एक मौजूदा उपकरण हो सकता है - और मैं इसे स्वचालित करने के लिए एक डेस्कटॉप ऐप की आवश्यकता पर सवाल उठाता हूं - यह अभी आपके मामले में काम कर सकता है - लेकिन क्या होगा यदि आप एक होस्ट किए गए समाधान पर जाते हैं?
नैट

आपको डेस्कटॉप ऐप के लिए GUI फ्रेमवर्क सीखने की आवश्यकता नहीं है। यदि आप html css और js का उपयोग कर सकते हैं (जो मैं मान रहा हूं कि आप हैं) तो आप वेब भाषाओं के साथ देशी दिखने वाले ऐप्स बनाने के लिए इलेक्ट्रॉन का उपयोग कर सकते हैं।
प्रणव ए।

यह प्रश्न पूछने के कुछ साल बाद इलेक्ट्रॉन का आविष्कार किया गया था;) लेकिन निश्चित रूप से आज आप सही हैं।
जंपीओ

जवाबों:


152

पेशेवरों स्विंग:

  • जावा लाइब्रेरी का हिस्सा, अतिरिक्त देशी पुस्तकालयों की आवश्यकता नहीं है
  • सभी प्लेटफार्मों पर उसी तरह काम करता है
  • नेटबीन्स और एक्लिप्स में एकीकृत जीयूआई संपादक
  • सन / ओरेकल द्वारा अच्छा ऑनलाइन ट्यूटोरियल
  • आधिकारिक जावा एक्सटेंशन (जैसे जावा ओपनगैल) द्वारा समर्थित

विपक्ष स्विंग:

  • मूल देखने और महसूस करने का तरीका वास्तविक मूल प्रणाली से अलग हो सकता है।
  • भारी घटक (देशी / awt) झूले घटकों को छिपाते हैं, अधिकांश समय समस्या नहीं होती है क्योंकि भारी घटकों का उपयोग दुर्लभ होता है

पेशेवरों SWT:

  • जब संभव हो तो मूल तत्वों का उपयोग करता है, इसलिए हमेशा मूल व्यवहार
  • ग्रहण द्वारा समर्थित, गुई संपादक वीईपी (वीईपी भी स्विंग और एडब्ल्यूटी का समर्थन करता है)
  • ऑनलाइन बड़ी संख्या में उदाहरण
  • awt और स्विंग घटकों के उपयोग की अनुमति देने के लिए एक एकीकृत awt / swt ब्रिज है

विपक्ष SWT:

  • प्रत्येक समर्थित प्रणाली के लिए देशी पुस्तकालयों की आवश्यकता है
  • उपयोग किए गए देशी संसाधनों (संकेत विकल्प) के कारण सभी प्रणालियों के प्रत्येक व्यवहार का समर्थन नहीं कर सकते हैं
  • देशी संसाधनों का प्रबंधन करना, जबकि देशी घटकों को अक्सर अपने माता-पिता के अन्य संसाधनों के साथ निपटाया जाएगा जैसे कि फोंट को मैन्युअल रूप से जारी किया जाना चाहिए या स्वचालित रिलीज के लिए घटक को सुनने वाले के रूप में पंजीकृत किया जाना चाहिए।

33
स्विंग "एक बार लिखने, कहीं भी दौड़ने" के करीब होगा। SWT अधिक पसंद होगा "एक बार लिखो, हर जगह ट्विक / टेस्ट करो"। लेकिन यही चर्चा अन्य भाषाओं के साथ भी हुई।
मार्क

12
वास्तविक रूप से, "देशी" लुक और स्विंग का अनुभव मेरे गनोम डेस्कटॉप से ​​काफी अलग व्यवहार करता है - जबकि, किसी कारण से, थीम काफी अच्छी तरह से काम करती हैं, मेनू भयानक दिखते हैं और लगभग अनुपयोगी होते हैं।
Hut8

9
ग्रहण 3.7 से शुरू होकर, VEP को WindowBuilder (जो स्विंग और SWT दोनों का समर्थन करता है) द्वारा प्रतिस्थापित किया गया था।
एलेक्सी रोमानोव

6
देशी घटकों की वजह से SWT का लाभ मेमोरी मेमोरी कम होना भी है। यह सीमित मेमोरी के साथ मशीनों पर वांछनीय होना चाहिए और स्विंग और स्वेट के बीच मेमोरी अंतर जीयूआई के बड़े डिजाइनों में बड़ा हो सकता है।
जैंतोबोला

1
@JanTobola यह सादा गलत है। मूल घटक जावा ही नहीं, बल्कि देशी हीप पर आवंटित मेमोरी का उपयोग करते हैं। मैंने नेटबीन्स प्लेटफ़ॉर्म, एक्लिप्स आरसीपी, एसडब्ल्यूटी और स्विंगिंग का उपयोग करते हुए बड़े जीयूआई पर काम किया है। जावा के बहुत शुरुआती संस्करणों में स्विंग में स्मृति पदचिह्न के कुछ गंभीर चिंताएं थीं (जब यह एक तीसरी पार्टी लाइब्रेरी थी और 1.1 से 1.2 के बाद भी? ), लेकिन यह अब सच नहीं है और यह SWT में बहुत सारे संसाधनों को जारी करने के लिए डेवलपर्स के लिए है, SWT के साथ मेमोरी लीक के बहुत अधिक अवसर हैं जबकि एक अपरिचित घटक स्विंग के साथ "निपटाने" द्वारा समाप्त होता है।
गौसेज

63

विचार करने के लिए एक महत्वपूर्ण बात यह है कि कुछ उपयोगकर्ता और कुछ पुनर्विक्रेता (डेल) अपने 64 बिट विंडोज पर 64 बिट वीएम स्थापित करते हैं, और आप 32 बिट और 64 बिट वीएम पर एक ही एसडब्ल्यूटी लाइब्रेरी का उपयोग नहीं कर सकते।

इसका मतलब है कि आपको उपयोगकर्ताओं को 32-बिट या 64-बिट जावा वीएम के आधार पर विभिन्न पैकेजों को वितरित करने और परीक्षण करने की आवश्यकता होगी। उदाहरण के लिए, Azureus के साथ इस समस्या को देखें , लेकिन आपके पास यह ग्रहण के साथ भी है, जहाँ आज तक फ्रंट डाउनलोड पृष्ठ पर निर्मित 64 बिट वीएम पर नहीं चलते हैं।


2
दिलचस्प बिंदु। एक उपयोगकर्ता के रूप में मैं अभी भी कंपित हूं कि यह इतनी बड़ी बात क्यों है। लेकिन ठीक है, इसलिए मुझे इस पर विचार करना होगा। धन्यवाद।
जानपियो

Btw: javaws (webstart) नहीं उपलब्ध 64 IMHO के लिए है
Karussell

1
@ कर्सेल: 3/4/2011 तक, विंडोज के लिए सन के 64-बिट जेवीएम में जेएनएलपी सपोर्ट है। मुझे लगता है कि यह कुछ समय के लिए सच है, लेकिन मुझे यकीन नहीं है कि कब तक।
अल्केमिस्ट

23

प्रो स्विंग:

  • स्विंग आईएमएचओ का सबसे बड़ा लाभ यह है कि आपको अपने आवेदन के साथ पुस्तकालयों को जहाज करने की आवश्यकता नहीं है (जो एमबी के दर्जनों से बचता है (!))।
  • प्रारंभिक वर्षों की तुलना में मूल देखने और महसूस करना झूले के लिए बहुत बेहतर है
  • प्रदर्शन swt के बराबर है (स्विंग धीमा नहीं है!)
  • नेटबीन्स मैटिस को एक आरामदायक घटक बिल्डर के रूप में पेश करता है।
  • JavaFX के भीतर स्विंग घटकों का एकीकरण आसान है।

लेकिन नीचे की रेखा पर मैं 'शुद्ध' स्विंग या स्वेट का उपयोग करने का सुझाव नहीं दूंगा ;-) झूले के लिए कई एप्लीकेशन फ्रेमवर्क हैं / बाहर swt। यहाँ देखो । सबसे बड़े खिलाड़ी नेटबीन्स (स्विंग) और ग्रहण (swt) हैं। एक और अच्छी रूपरेखा ग्रिफ़ॉन हो सकती है और एक अच्छा 'घटकों का सेट' धुरी (स्विंग) है। ग्रिफ़ॉन बहुत दिलचस्प है क्योंकि यह बहुत सारे पुस्तकालयों को एकीकृत करता है और न केवल स्विंग करता है ; धुरी, swt, आदि


1
हाँ NetBeans में GUI बिल्डर के रूप में Matisse है, लेकिन कोड वास्तव में क्रियात्मक है, पढ़ने के लिए भ्रामक है, और स्रोत कोड द्वारा संपादित करना असंभव है। यदि आप वास्तव में एक GUI बिल्डर ग्रहण के साथ जाना चाहते हैं WindowBuilder
प्रणव ए।

13

मैं दो कारणों से स्विंग का उपयोग करूंगा।

  • यह लंबे समय तक रहा है और इस पर अधिक विकास प्रयास लागू हुए हैं। इसलिए यह संभवतः अधिक विशेषता पूर्ण है और (शायद) कम कीड़े हैं।

  • प्रदर्शनकारी अनुप्रयोगों के निर्माण पर बहुत सारे प्रलेखन और अन्य मार्गदर्शन हैं।

  • ऐसा लगता है कि सभी प्लेटफ़ॉर्म पर एक साथ स्विंग करने के लिए परिवर्तन एक साथ होते हैं, जबकि SWT में परिवर्तन पहले विंडोज, फिर लिनक्स पर दिखाई देते हैं।

यदि आप एक बहुत ही सुविधा संपन्न एप्लिकेशन का निर्माण करना चाहते हैं, तो आप नेटबीन्स आरसीपी (रिच क्लाइंट प्लेटफ़ॉर्म) की जांच कर सकते हैं । एक सीखने की अवस्था है, लेकिन आप थोड़े अभ्यास के साथ अच्छे अनुप्रयोगों को एक साथ रख सकते हैं। मेरे पास वैध निर्णय लेने के लिए ग्रहण मंच के साथ पर्याप्त अनुभव नहीं है।

यदि आप संपूर्ण RCP का उपयोग नहीं करना चाहते हैं, तो NetBeans में कई उपयोगी घटक होते हैं जिन्हें स्वतंत्र रूप से बाहर निकाला और उपयोग किया जा सकता है।

सलाह का एक अन्य शब्द, विभिन्न लेआउट प्रबंधकों में देखें। जब मैं सीख रहा था तो उन्होंने मुझे लंबे समय तक फंसाया। सर्वश्रेष्ठ में से कुछ भी मानक पुस्तकालय में नहीं हैं। MigLayout और (दोनों स्विंग और SWT के लिए) JGoodies प्रपत्र उपकरण मेरी राय में सर्वश्रेष्ठ में से दो हैं।



8

आपकी आवश्यकताओं के लिए यह लगता है कि नीचे की रेखा स्विंग का उपयोग करेगी क्योंकि इसे शुरू करने के लिए थोड़ा आसान है और एसडब्ल्यूटी के रूप में मूल मंच के साथ कसकर एकीकृत नहीं है।

स्विंग आमतौर पर एक सुरक्षित शर्त है।


6

दिलचस्प सवाल। मैं इसके बारे में डींग मारने के लिए SWT को अच्छी तरह से नहीं जानता (स्विंग और AWT के विपरीत) लेकिन यहाँ SWT / स्विंग / AWT पर की गई तुलना है।

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

और यहां वह साइट है जहां आप मूल रूप से SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm ) पर कुछ भी देख सकते हैं

आशा है कि आप सही निर्णय लेंगे (यदि कोडिंग में सही निर्णय हैं) ... :-)


4
लेकिन ध्यान दें लेख 2003 से है ...
एलेक्सी रोमानोव

4

यदि आप एक से अधिक सुविधाओं के साथ पूर्ण कार्यात्मक अनुप्रयोगों के निर्माण की योजना बनाते हैं, तो मैं सुझाव दूंगा कि फ्रेमवर्क के रूप में ग्रहण आरसीपी का उपयोग करने के लिए सही कूदें।

यदि आपका आवेदन बहुत बड़ा नहीं होगा या आपकी आवश्यकताओं को एक सामान्य व्यापार ढांचे द्वारा नियंत्रित किया जाना बहुत ही अनूठा है, तो आप सुरक्षित रूप से स्विंग के साथ कूद सकते हैं।

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

प्रो स्विंग:

  • अधिक विशेषज्ञ
  • अधिक जावा-जैसे (लगभग कोई सार्वजनिक क्षेत्र नहीं, संसाधन पर निपटान की आवश्यकता नहीं)

प्रो SWT:

  • अधिक ओएस देशी
  • और तेज

10
मुझे लगता है कि "तेज" बिंदु अत्यधिक विवादास्पद है।
रशियन हेवर्ड

SWT उपयोग करने के लिए बोझिल है, मुझे विंडोज के प्रत्येक संस्करण के साथ अपने GUI का परीक्षण करना था, कुछ बग केवल Windows Vista के साथ प्रतिलिपि प्रस्तुत करने योग्य थे। कुछ तरीकों को केवल अनइम्प्लीमेंट किया जाता है या हुड के तहत AWT को कॉल किया जाता है, जिसका अर्थ है कि आप SWT को तोड़ने के लिए जोखिम के बिना AWT और स्विंग के बिना एक कॉम्पैक्ट JRE का उपयोग नहीं कर सकते। मैंने 2009 में SWT का उपयोग करना शुरू किया और मेरी विनम्र राय में, यह तेज़ नहीं है। मैं आपको सावधानीपूर्वक डिज़ाइन किए गए बेंचमार्क प्रदान करने की सलाह देता हूं।
गौसेज

4

एक बात पर विचार करें: स्क्रीन्रेडर्स

कुछ कारणों से, स्क्रीनराइडर (और विंडोज़ के लिए जावा एक्सेसब्रिज) का उपयोग करते समय कुछ स्विंग घटक ठीक से काम नहीं करते हैं। पता है कि अलग-अलग स्क्रीन्रेडर्स के परिणामस्वरूप अलग-अलग व्यवहार होते हैं। और मेरे अनुभव में एसडब्ल्यूटी-ट्री एक स्क्रीनरीडर के साथ स्विंग-ट्री की तुलना में बहुत बेहतर प्रदर्शन करता है। इस प्रकार हमारे आवेदन SWT और स्विंग दोनों घटकों का उपयोग करने में समाप्त हो गया।

उचित SWT- लाइब्रेरी को वितरित करने और लोड करने के लिए, आपको यह लिंक उपयोगी मिल सकती है: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime1.1


3

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.