Java Swing GUI มีข้อบกพร่องอะไรบ้าง [ปิด]


11

ฉันใช้ Java Swing สำหรับแอปพลิเคชันเดสก์ท็อปบางตัวแล้ว แต่ฉันไม่ได้ใช้กรอบงาน GUI อื่นที่มากดังนั้นฉันไม่สามารถเปรียบเทียบได้

มีบางอย่างที่ฉันชอบกับ Swing และบางอย่างที่ฉันไม่ชอบ แต่นั่นเป็นสถานการณ์ที่เกือบทุกอย่าง

อะไรคือข้อเสียที่ใหญ่ที่สุดของ Java Swing GUI framework?


2
คำถามคือการขัดจังหวะ ฉันก็สงสัยเช่นกันว่าอะไรคือจุดแข็งและจุดอ่อนของ Swing เมื่อเทียบกับ QT, GTK, SWT, Winforms, Cocoa และอื่น ๆ บางทีคุณควรเรียบเรียงหัวข้อใหม่เพื่อขอเปรียบเทียบแทนที่จะเป็นข้อเสีย (ซึ่งมักจะนำคำตอบที่ไม่ได้โต้แย้งมาก่อน)
barjak

คำตอบ:


3
  1. คุณต้องติดตั้งจาวาไว้ที่ไหนซักแห่ง นี่เป็นเรื่องจริงสำหรับกรอบ GUI ทั้งหมด แต่ Java มีการรับรู้ลิงกอริลลา 2 ตัน มันโหลดได้ดีขึ้น แต่วันแรกของแอปเพล็ต java ปิดผู้คนจำนวนมากออกไป หากคุณต้องการเพียงแค่เรียกใช้แอปเดียวมันเป็นการบำรุงรักษามากมายที่จะทำให้มันทันสมัยอยู่เสมอด้วยแพตช์รักษาความปลอดภัยและสิ่งที่คล้ายคลึง ทุกคนต้องมี Flash สำหรับ youtube กรอบงาน. Net ติดตั้งอยู่เบื้องหลังและทุกคนก็เปิดใช้งานจาวาสคริปต์ในเบราว์เซอร์ของพวกเขา Java เป็นสิ่งพิเศษที่ต้องทำ

  2. ถึงแม้ว่ามันจะเป็นแบบเขียนครั้งเดียวทำงานได้ทุกที่ แต่คุณก็ยังพบว่า Mac OSX ไม่มีสิ่งใหม่ที่คุณต้องการใช้หรือลูกค้ารายหนึ่งปฏิเสธที่จะอัปเกรดลินุกซ์ของตนเองผ่าน JRE 1.4

  3. ในฐานะนักพัฒนาคุณต้องคิดเกี่ยวกับการทำเกลียว และมันก็เป็นเรื่องที่ยุ่งยากเนื่องจากมัลติเธรดเป็นไปได้ แต่การเสแสร้งทำท่าเหมือนว่ามันเป็นเธรดเดี่ยวทั้งหมด แต่ครึ่งหนึ่งของห้องสมุดที่คุณดึงเข้าไปจะมีหลายเธรดหลายระดับและคิดว่าคุณรู้เกี่ยวกับ EDT จะเรียกใช้ต่อไปและมันก็บังคับให้เรียนเป็นจำนวนมากอย่างยากลำบาก

  4. ประสบการณ์การสวิงไม่ได้ถ่ายโอนอย่างง่ายดายไปยังการพัฒนา UI ประเภทอื่น ตัวอย่างเช่นหากคุณเป็นเสียงหวือที่ตารางใน. css คุณจะต้องถูกลอยลำอย่างสมบูรณ์โดย Jtables นักแสดงภาพบรรณาธิการและอื่น ๆ

โดยทั่วไปแล้วปัญหาหลักของ Swing คือมันไม่ได้ขึ้นอยู่กับการวางตลาด มันเป็นเทคโนโลยีที่เพียงพออย่างสมบูรณ์แบบสำหรับกรณีการใช้งานจำนวนมาก แต่ในช่วง 5 หรือ 6 ปีแรกนั้นเต็มไปด้วยการใช้งานที่น่ากลัวและแอปเพล็ตที่เลวร้าย และตอนนี้ก็เป็นเทคโนโลยีเก่า ๆ สำหรับ Web 3.0 หรืออะไรก็ตาม

จากทั้งหมดที่กล่าวมาฉันชอบ Swing และคิดว่าข้อดีมักจะมากกว่าข้อเสียเมื่อคุณต้องการสิ่งที่เสนอ อย่างไรก็ตามประสบการณ์บนเว็บแพร่หลายไปแล้วในขณะนี้ที่ผู้ใช้หลายคนกำลังจะมีช่วงเวลาที่ง่ายขึ้นด้วยแอพพลิเคชั่นบนเว็บ และมีแอพ Swing ที่ยอดเยี่ยมอยู่ที่นั่น แต่ดูเหมือนจะไม่สำคัญ


1
ฉันอยู่ในสถานการณ์เดียวกันกับ OP: ฉันรู้ว่า Swing และฉันมีส่วนร่วมในการเปรียบเทียบกับ GUI อื่น ๆ สำหรับฉันแล้วข้อ 1, 2 และ 4 นั้นไม่เกี่ยวข้องกับคำถาม ดังนั้นฉันต้องการตอบสนองต่อจุดที่ 3: คุณสามารถยกตัวอย่างชุดเครื่องมือ GUI แบบมัลติเธรดได้ไหม ขอบคุณ
barjak

2
@barjak: GUI แบบมัลติเธรดเป็นข้อผิดพลาด สิ่งเดียวที่ฉันรู้คือ Java AWT แบบเก่า แต่พวกเขาเรียนรู้จากความผิดพลาดเมื่อพวกเขาออกแบบ Swing ซึ่งเป็นเธรดเดี่ยวเช่นเดียวกับกรอบงาน GUI ที่ทันสมัยทั้งหมด
Jonas

@ Jonas การทำให้นักพัฒนาคิดว่าการทำมัลติเธรดมักจะเป็นความผิดพลาด แต่คุณไม่สามารถเรียกใช้งานภาพเคลื่อนไหวทำการเรียก RMI หรือทำการคำนวณที่เข้มข้น
Steve Jackson

3
@ Steve: นั่นเป็นเรื่องจริง แต่คุณไม่ควรทำการเรียก RMI และการคำนวณที่เข้มข้นใน GUI-thread สิ่งที่ควรทำในเธรดพื้นหลังเช่นเดียวกับใน Swing และ WPF
Jonas

@barjak - รูปแบบ Windows, MFC, SWT, pyQT, Juce .... ฉันมีเวลาคิดหนักขึ้นของคนที่ไม่ได้มีหลายเธรด โดยทั่วไปแล้วจะใช้กฎเดียวกันนี้ แต่คุณไม่สามารถแตะส่วนประกอบ GUI ของคุณได้ยกเว้นจากเธรดที่สร้างขึ้นมา
Steve Jackson

2

โจนาส

แกว่ง generalises สถาปัตยกรรมพื้นฐานของคุณเพื่อให้คุณมีประสบการณ์ผู้ใช้แพลตฟอร์มที่เป็นกลาง ส่วนประกอบเฮฟวี่เวทเพียงชิ้นเดียว (ที่จัดทำโดยระบบปฏิบัติการ) คือคอนเทนเนอร์ JFrame และส่วนที่เหลือจะถูกจัดการโดย Swing TAKIT AWT ในอีกด้านหนึ่งขอให้ระบบปฏิบัติการดึงส่วนประกอบ UI ทั้งหมดซึ่งหมายความว่าเร็วขึ้นในหลาย ๆ วิธีเมื่อคุณใช้ส่วนประกอบ UI ดั้งเดิมเฉพาะกับระบบปฏิบัติการ SWT พยายามที่จะบรรลุจุดกึ่งกลางสำหรับส่วนประกอบมาตรฐานต่าง ๆ เช่นปุ่มและฉลาก (ซึ่งมีอยู่ในระบบปฏิบัติการส่วนใหญ่) มันช่วยให้ระบบปฏิบัติการจัดการกับสิ่งเหล่านั้นและสำหรับส่วนประกอบพิเศษอื่น ๆ SWT จะจัดการการสร้างให้คุณ

ที่ได้รับการกล่าวว่าฉันสามารถร่างข้อบกพร่อง

(1) เนื่องจากชุดเครื่องมือสร้างและแสดงส่วนประกอบสำหรับคุณแทนที่จะถามระบบปฏิบัติการคุณจึงไม่ได้รับประโยชน์จากความเร็วของส่วนประกอบที่มีอยู่ภายในที่ให้บริการโดยระบบปฏิบัติการ

(2) UI นั้นไม่ได้ จำกัด เฉพาะเพราะมันดูต่างไปจากแพลตฟอร์มระบบปฏิบัติการส่วนใหญ่เกี่ยวกับสิ่งที่คุณใช้และรูปลักษณ์

(3) ตัวจัดการเลย์เอาต์บางตัวเช่น GridBadLayout และอื่น ๆ สามารถทำให้ง่ายขึ้นได้ ฉันได้สูญเสียการนับจำนวนโปรเจคที่ฉันทำงานในที่ซึ่งผู้คนใส่ GridBagLayout ไว้ในโค้ด bespoke เพื่อให้ใช้งานได้ง่ายขึ้น

ฉันแนะนำให้คุณเขียนแอพง่าย ๆ ใน AWT, Swing และ SWT และเปรียบเทียบแนวทางการพัฒนาผลิตภัณฑ์สุดท้ายระหว่างพวกเขาทั้งหมดจากนั้นตรวจสอบความคิดเห็นต่าง ๆ ที่ทำจากนักพัฒนาคนอื่น ๆ และตัดสินใจว่าอันไหนดีที่สุด ฉันทำงานกับ Swing มาหลายปีแล้วและฉันก็ไม่ชอบ SWT แต่ฉันรู้ว่า Swing มีความซับซ้อนมากกว่าที่จะต้องเปรียบเทียบกับเฟรมเวิร์กอื่น ๆ


4
Swing นั้นถูกเร่งด้วย GPUซึ่งเฟรมเนทีฟนั้นไม่บ่อยนักดังนั้นฉันคิดว่า Swing นั้นเร็วกว่า นี่เป็นกลยุทธ์ที่ WPF บน Windows มี แต่ไม่ใช่ WinForms (เฉพาะใน Windows บางรุ่น) "[ugly] อย่างไร ... เกี่ยวกับรูปลักษณ์และความรู้สึกที่คุณใช้" จะเป็นจริงเมื่อปรับแต่งได้มากหรือคุณสามารถใช้แพลตฟอร์มของ LaF เองได้? ฉันยอมรับว่าตัวจัดการโครงร่างแย่มาก
Jonas

โจนัสมันเป็นลักษณะของการสวิงที่ปรับแต่งได้ซึ่งทำให้มันยุ่งยากเมื่อเทียบกับเฟรมเวิร์กอื่น ๆ หากคุณพยายามหลีกเลี่ยงคุณสมบัติที่ระบบปฏิบัติการมอบให้คุณคุณจะสูญเสียผลประโยชน์มากมายที่เสนอให้ Swing รุ่นแรกเป็นฝันร้ายซึ่งนำไปสู่การสร้าง SWT ตั้งแต่แรก หลังจากนั้น Swing ได้รับการปรับปรุงให้เร็วขึ้นมากและคุณมีคลาสอย่าง SwingUtilities ที่ให้การสนับสนุนเธรด GUI ที่ดีขึ้น
Desolate Planet

น่าเกลียดอาจเป็นคำผิด เอเลี่ยนอาจจะเป็นคำที่ดีกว่าเพราะรูปลักษณ์และความรู้สึกนั้นไม่เหมือนกับรูปลักษณ์ UI ดั้งเดิมจากสิ่งที่ฉันจำได้คุณมี Java, motif, metal และอีกสองสามอย่าง แต่โดยทั่วไปแล้วพวกเขาไม่ได้ ทีทั้งหมดที่สวย
Desolate Planet

สิ่งต่อไปที่ต้องพิจารณาเมื่อทำการเปรียบเทียบคือความพยายามในการพัฒนา UI ฉันจะไม่บอกว่าผู้จัดการเลย์เอาต์แย่จริง ๆ ไม่มีเลย์เอาต์เลย (ซึ่งฉันต้องจัดการกับอุปกรณ์พกพา) แต่พวกเขาไม่ได้ใช้ความพยายามใด ๆ ในการทำให้รูปแบบง่ายขึ้น
Desolate Planet

ฉันคิดว่าจากสิ่งที่คุณพูดคุณได้ใช้ Swing รุ่นล่าสุด แต่เมื่อออกมาครั้งแรกผู้คนก็ไม่ชอบมันมากและเมื่อพวกเขาพยายามจัดหาแอพเล็ตจาก Swing มีประวัติเกี่ยวกับเฟรมเวิร์ก UI ที่พัฒนาใน Java เป็นจำนวนมากและเป็นเรื่องที่น่าสนใจหากคุณอ่าน
Desolate Planet

-2

การสวิงช้า (ประสิทธิภาพต่ำ) ยาก / ใช้ยาก (เมื่อเทียบกับเกมอื่น) และมันก็ดูไม่ค่อยดีเท่าที่ควรในบางแพลตฟอร์ม


5
ฉันพบว่าเร็ว (มีการเร่งความเร็ว GPU เมื่อเทียบกับ GUI ท้องถิ่นหลายตัว) ดังนั้นฉันจึงไม่เห็นด้วยกับประสิทธิภาพหรือคุณมีตัวอย่างใด ๆ มันยากและเงอะงะอย่างไรเมื่อเทียบกับกรอบอื่น ๆ ? ฉันยอมรับว่ามันดูไม่ดี แต่สามารถกำหนดค่าให้ดูเหมือนแอพทั่วไปหรือใช้ LaF แบบกำหนดเอง
Jonas

ดูเหมือนว่าจะไม่ใช่ GTK มากหรือน้อยเสมอไป สิ่งที่ฉันเคยได้ยินคือเพราะอาศัย Java 2D เพื่อวาดวิดเจ็ตมันช้า แต่ฉันไม่มีอะไรจะพิสูจน์ด้วย ทั้ง Qt และ GTK รู้สึกงุ่มง่ามกับฉันน้อย แต่รสชาติต่างกัน
Anto

อามันอาจทำงานได้แย่ลงในบางแพลตฟอร์ม ฉันใช้มันเฉพาะบน Windows ในกรณีที่ GPU เร่งและเร็วมาก
Jonas

6
ผู้คนยังคงบ่นว่ามีบางสิ่งที่ดูไม่เหมือนพื้นเมืองในขณะที่ใช้งานเบราว์เซอร์มากขึ้น (คิดว่า: stackexchange) ซึ่งทุกหน้ามีลักษณะแตกต่างกันอย่างไร และความเร็ว? ส่วนใหญ่โปรแกรม GUI เชิงโต้ตอบกำลังรอผู้ใช้อยู่
ผู้ใช้ไม่ทราบ

2
รายการ "อินเทรนด์" ส่วนใหญ่ไม่ได้ดูเป็นของพื้นเมืองอีกต่อไป การสวิงจบลงไม่ดีขึ้นหรือแย่ลงในเรื่องนั้น ประสิทธิภาพการทำงานของแอป 50kloc ของเรา (ลูกค้าที่อ้วน) ดูเหมือนว่าโอเค ง่ายกว่ามากที่จะแกว่งไปยังจุดที่ไม่ล้มเหลวกว่าแอปพลิเคชั่น "ดั้งเดิม"
ทิม Williscroft
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.