แอ็พพลิเคชัน Java Desktop: SWT vs. Swing [ปิด]


158

ฉันเป็นนักพัฒนาเว็บในเวลากลางวันและคิดเกี่ยวกับการสร้างแอปพลิเคชันเดสก์ท็อปจริงตัวแรกของฉัน แนวคิดคือการสร้างเครื่องมือที่ทำงานซ้ำ ๆ โดยอัตโนมัติในเว็บแอปพลิเคชันที่ไม่มี API ให้บริการ

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

ที่ฉันไม่แน่ใจก็คือถ้าฉันควรใช้ SWT หรือสวิง ในขณะที่ผู้ชมหลักของฉันใช้ Windows ฉันต้องการดูเป็นภาษาท้องถิ่นเท่าที่จะเป็นไปได้ Linux และ Mac ควรใช้งานได้ แต่รูปลักษณ์ไม่สำคัญเท่านี้

ดังนั้นข้อโต้แย้งสำหรับและกับแต่ละ UI Framework, Swing หรือ SWT คืออะไร?

ขอบคุณ

PS: ฉันพัฒนาบน Windows โดยใช้ Eclipse แต่กำลังคิดที่จะเล่นกับ Netbeans


คำถามยาก :-) ฉันจะไปกับวงสวิง แต่ไม่มี PRO หรือ CONs สำหรับการตัดสินใจ
— Pablo Santa Cruz

ซ้ำ Q. โปรดมองหา Swing vs. SWT Q ที่ถูกถามแล้วใน SO FWIW ฉันใช้ Swing เพียงเพราะฉันเรียนรู้วิธีนี้ มีห้องสมุดที่มีรูปลักษณ์และความรู้สึกดั้งเดิม (ดู jgoodies look)
— Jason S

"สร้างเครื่องมือที่ทำงานซ้ำซ้อนโดยอัตโนมัติในเว็บแอปพลิเคชัน" - ข้อมูลใด ๆ เกี่ยวกับเรื่องนี้? อาจมีเครื่องมือที่มีอยู่ - และฉันตั้งคำถามถึงความต้องการแอปเดสก์ท็อปเพื่อทำสิ่งนี้โดยอัตโนมัติ - มันอาจใช้งานได้ในกรณีของคุณตอนนี้ - แต่ถ้าคุณย้ายไปใช้โซลูชันที่โฮสต์
— เนท

คุณไม่จำเป็นต้องเรียนรู้กรอบ GUI สำหรับแอพเดสก์ท็อป หากคุณสามารถใช้ html css และ js (ซึ่งฉันสมมติว่าคุณเป็น) คุณสามารถใช้ Electron เพื่อสร้างแอพที่ดูเป็นภาษาท้องถิ่นด้วยภาษาบนเว็บ
— Pranav A.

อิเล็กตรอนถูกคิดค้นไม่กี่ปีหลังจากที่ฉันถามคำถามนี้;) แต่แน่นอนวันนี้คุณถูกต้อง
— janpio

คำตอบ:


152

ข้อดีสวิง:

  • ส่วนหนึ่งของไลบรารี java ไม่จำเป็นต้องมีไลบรารีเนทีฟเพิ่มเติม
  • ทำงานในลักษณะเดียวกันกับทุกแพลตฟอร์ม
  • Integrated GUI Editor ใน Netbeans และ Eclipse
  • บทเรียนออนไลน์ที่ดีโดย Sun / Oracle
  • สนับสนุนโดยนามสกุล Java อย่างเป็นทางการ (เช่น java OpenGL)

ข้อเสียแกว่ง:

  • รูปลักษณ์และความรู้สึกของชาวพื้นเมืองอาจมีความแตกต่างจากระบบของจริง
  • ส่วนประกอบหนัก (native / awt) ซ่อนคอมโพเนนต์การแกว่งไม่ใช่ปัญหาส่วนใหญ่เนื่องจากการใช้ส่วนประกอบหนักค่อนข้างหายาก

ข้อดี SWT:

  • ใช้องค์ประกอบพื้นฐานเมื่อทำได้
  • สนับสนุนโดย eclipse, gui editor VEP (VEP รองรับ Swing และ AWT)
  • ตัวอย่างจำนวนมากออนไลน์
  • มีสะพาน awt / swt ในตัวเพื่อให้สามารถใช้ส่วนประกอบ awt และ swing ได้

ข้อเสีย SWT:

  • ต้องการไลบรารีพื้นฐานสำหรับแต่ละระบบที่รองรับ
  • อาจไม่รองรับการทำงานทุกอย่างในทุกระบบเนื่องจากทรัพยากรดั้งเดิมที่ใช้ (ตัวเลือกคำแนะนำ)
  • การจัดการทรัพยากรเนทีฟในขณะที่คอมโพเนนต์เนทีฟมักจะถูกกำจัดไปพร้อมกับแหล่งทรัพยากรอื่น ๆ เช่นฟอนต์ต้องถูกปล่อยหรือลงทะเบียนด้วยตนเองเพื่อกำจัดผู้ฟังไปยังส่วนประกอบสำหรับการปล่อยอัตโนมัติ

33
การสวิงจะใกล้เคียงกับ "เขียนครั้งเดียวทำงานได้ทุกที่" SWT จะเหมือน "เขียนเพียงครั้งเดียวปรับแต่ง / ทดสอบได้ทุกที่" แต่การสนทนาเดียวกันนี้เกิดขึ้นกับภาษาอื่นเช่นกัน
— ทำเครื่องหมาย

12
รูปลักษณ์และความรู้สึกของ "Native" ของ Swing นั้นแนบเนียนแตกต่างจากเดสก์ท็อป Gnome มาก - ด้วยเหตุผลบางประการธีมก็ใช้งานได้ดีเมนูดูน่ากลัวและแทบจะใช้ไม่ได้
— Hut8

9
เริ่มต้นด้วย Eclipse 3.7, VEP ถูกแทนที่ด้วย WindowBuilder (ซึ่งรองรับทั้ง Swing และ SWT)
— Alexey Romanov

6
ข้อดีของ SWT ก็คือลดความจำในการจำลงเพราะส่วนประกอบดั้งเดิม สิ่งนี้ควรเป็นที่ต้องการบนเครื่องที่มีหน่วยความจำที่ จำกัด และความแตกต่างของหน่วยความจำระหว่าง swing และ swt สามารถมีขนาดใหญ่ในการออกแบบ GUI ขนาดใหญ่
— jantobola

1
@JanTobola มันผิดธรรมดา ส่วนประกอบดั้งเดิมใช้หน่วยความจำที่จัดสรรในฮีปดั้งเดิมไม่เพียง แต่บนฮีป Java ฉันเคยทำงานกับ GUI ขนาดใหญ่โดยใช้ Netbeans Platform, Eclipse RCP, SWT และ Swing.There มีข้อกังวลอย่างมากเกี่ยวกับ footprint ของหน่วยความจำใน Swing ใน Java รุ่นแรก ๆ (เมื่อเป็นห้องสมุดของบุคคลที่สาม ) แต่มันก็ไม่เป็นความจริงอีกต่อไปและมันก็ขึ้นอยู่กับนักพัฒนาที่จะปล่อยทรัพยากรจำนวนมากใน SWT มีโอกาสมากขึ้นที่หน่วยความจำรั่วด้วย SWT ในขณะที่องค์ประกอบที่ไม่มีการอ้างอิงนั้นสิ้นสุดลงด้วยการ "กำจัด" ด้วย Swing
— gouessej

63

สิ่งสำคัญที่ต้องพิจารณาคือผู้ใช้และผู้ค้าปลีกบางราย (Dell) ติดตั้ง VM 64 บิตบน Windows 64 บิตและคุณไม่สามารถใช้ไลบรารี SWT เดียวกันบน VM 32 บิตและ 64 บิต

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


2
จุดที่น่าสนใจ ในฐานะผู้ใช้ฉันยังคงเซทำไมมันเป็นเรื่องใหญ่ แต่ก็เป็นดังนั้นฉันจะต้องพิจารณาเรื่องนี้ ขอบคุณ
— janpio

btw: javaws (webstart) ใช้งานไม่ได้กับ 64 IMHO
— Karussell

1
@Karussell: ตั้งแต่วันที่ 3/4/2554 JVM 64 บิตสำหรับ Windows ของ Sun ได้รับการสนับสนุน JNLP ฉันคิดว่ามันเป็นเรื่องจริงมาพักหนึ่งแล้ว แต่ฉันไม่แน่ใจว่านานเท่าไหร่
— นักเล่นแร่แปรธาตุ

23

โปรแกว่ง:

  • ข้อได้เปรียบที่ใหญ่ที่สุดของการแกว่ง IMHO คือคุณไม่จำเป็นต้องจัดส่งไลบรารี่กับแอพพลิเคชั่นของคุณ
  • รูปลักษณ์และความรู้สึกของชนพื้นเมืองนั้นดีกว่าการแกว่งมากกว่าในปีแรก ๆ
  • ประสิทธิภาพเทียบได้กับ swt (แกว่งไม่ช้า!)
  • NetBeans เสนอ Matisse ในฐานะผู้สร้างส่วนประกอบที่สะดวกสบาย
  • การรวมของส่วนประกอบ Swing ภายใน JavaFX นั้นง่ายขึ้น

แต่ที่บรรทัดล่างฉันจะไม่แนะนำให้ใช้การแกว่ง 'บริสุทธิ์' หรือ swt ;-) มีกรอบงานแอปพลิเคชันมากมายสำหรับการแกว่ง / swt out ดูกร ผู้เล่นที่ใหญ่ที่สุดคือ netbeans (swing) และ eclipse (swt) กรอบงานที่ดีอีกอย่างอาจเป็น Griffon และ 'ชุดของส่วนประกอบ' ที่ดีคือ pivot (แกว่ง) แร้งเป็นที่น่าสนใจมากเพราะบูรณาการจำนวนมากของห้องสมุดและไม่เพียง แต่แกว่ง ; ยังหมุน, swt, ฯลฯ


1
ใช่ NetBeans มี Matisse ในฐานะผู้สร้าง GUI แต่รหัสดังกล่าวจะสร้างความสับสนให้อ่านและถัดจากโค้ดที่เป็นไปไม่ได้ที่จะแก้ไข ถ้าคุณต้องการสร้าง GUI ไปกับสุริยุปราคา WindowBuilder จริงๆ
— Pranav A.

13

ฉันจะใช้ Swing ด้วยเหตุผลหลายประการ

  • มันใช้เวลานานขึ้นและมีความพยายามในการพัฒนามากขึ้น ดังนั้นจึงน่าจะเป็นคุณสมบัติที่สมบูรณ์กว่าและ (อาจ) มีข้อบกพร่องน้อยลง

  • มีเอกสารจำนวนมากและคำแนะนำอื่น ๆ ในการผลิตแอพพลิเคชั่นนักแสดง

  • ดูเหมือนว่าการเปลี่ยนแปลงของ Swing จะเผยแพร่ไปยังทุกแพลตฟอร์มพร้อมกันในขณะที่การเปลี่ยนแปลงของ SWT นั้นจะปรากฏบน Windows ก่อนจากนั้น Linux

หากคุณต้องการสร้างแอปพลิเคชันที่มีคุณสมบัติหลากหลายคุณอาจต้องการตรวจสอบNetBeans RCP (แพลตฟอร์มไคลเอนต์ที่มีรูปแบบ) มีช่วงการเรียนรู้ แต่คุณสามารถรวบรวมแอปพลิเคชันที่ดีได้อย่างรวดเร็วด้วยการฝึกฝนเล็กน้อย ฉันไม่มีประสบการณ์เพียงพอกับแพลตฟอร์ม Eclipse เพื่อทำการตัดสินใจที่ถูกต้อง

หากคุณไม่ต้องการใช้ RCP ทั้งหมด NetBeans ยังมีส่วนประกอบที่มีประโยชน์มากมายที่สามารถดึงออกมาและใช้งานได้อย่างอิสระ

คำแนะนำอีกคำหนึ่งให้ดูที่ผู้จัดการรูปแบบที่แตกต่างกัน พวกเขาสะดุดฉันเป็นเวลานานเมื่อฉันเรียนรู้ สิ่งที่ดีที่สุดบางอย่างไม่ได้อยู่ในห้องสมุดมาตรฐาน MigLayout (ทั้งสวิงและ SWT) และJGoodiesรูปแบบเครื่องมือที่สองที่ดีที่สุดในความคิดของฉัน



8

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

สวิงมักเป็นเดิมพันที่ปลอดภัย


6

คำถามที่น่าสนใจ ฉันไม่รู้ SWT ดีเกินกว่าที่จะโอ้อวดเกี่ยวกับเรื่องนี้ (ต่างจาก Swing และ AWT) แต่นี่เป็นการเปรียบเทียบที่ทำกับ SWT / Swing / 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 ...
— Alexey Romanov

4

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

หากแอปพลิเคชันของคุณไม่ใหญ่เกินไปหรือความต้องการของคุณนั้นไม่เหมือนใครเกินกว่าที่จะจัดการได้ตามกรอบธุรกิจปกติคุณสามารถกระโดดได้อย่างปลอดภัย

ในตอนท้ายของวันฉันขอแนะนำให้คุณลองใช้เทคโนโลยีทั้งสองเพื่อค้นหาสิ่งที่เหมาะกับคุณมากกว่า เช่นเดียวกับ Netbeans vs Eclipse vs IntelliJ ไม่มีคำตอบที่ถูกต้องที่นี่และกรอบทั้งสองมีข้อเสียของตัวเอง

สวิง Pro:

  • ผู้เชี่ยวชาญมากขึ้น
  • คล้าย Java มากขึ้น (เกือบจะไม่มีเขตข้อมูลสาธารณะไม่จำเป็นต้องกำจัดทรัพยากร)

Pro SWT:

  • ระบบปฏิบัติการเพิ่มเติม
  • ได้เร็วขึ้น

10
ฉันคิดว่าจุด "เร็วกว่า" เป็นที่ถกเถียงกันมาก
— Russ Hayward

SWT นั้นยุ่งยากในการใช้งานฉันต้องทดสอบ GUI ของฉันกับ Windows แต่ละรุ่นข้อบกพร่องบางอย่างสามารถทำซ้ำได้เฉพาะใน Windows Vista วิธีการบางอย่างไม่ได้ดำเนินการหรือเรียก AWT ภายใต้ประทุนซึ่งหมายความว่าคุณไม่สามารถใช้ JRE ขนาดกะทัดรัดได้โดยไม่ต้องใช้ AWT และ Swing โดยไม่เสี่ยงที่จะทำลาย SWT ฉันเริ่มใช้ SWT ในปี 2009 และในความเห็นที่ต่ำต้อยของฉันมันไม่ได้เร็วขึ้น ฉันแนะนำให้คุณใช้เกณฑ์มาตรฐานที่ออกแบบอย่างระมัดระวัง
— gouessej

4

สิ่งหนึ่งที่ควรพิจารณา: โปรแกรมคัดกรอง

ด้วยเหตุผลบางอย่างส่วนประกอบของ Swing บางอย่างทำงานได้ไม่ดีเมื่อใช้โปรแกรมอ่านหน้าจอ (และ Java AccessBridge สำหรับ Windows) รู้ว่าตัวแยกหน้าจอที่แตกต่างกันส่งผลให้เกิดพฤติกรรมที่แตกต่างกัน และจากประสบการณ์ของฉัน SWT-Tree ทำงานได้ดีกว่า Swing-Tree ร่วมกับโปรแกรมอ่านหน้าจอ ดังนั้นแอปพลิเคชันของเราจึงใช้ทั้งส่วนประกอบ SWT และ Swing

สำหรับการกระจายและการโหลด SWT ห้องสมุดที่เหมาะสมคุณอาจพบว่ามีประโยชน์ที่ลิงค์นี้: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191


3

SWT ถูกสร้างขึ้นเพื่อตอบสนองต่อความเฉื่อยชาของการสวิงในช่วงเปลี่ยนศตวรรษ ตอนนี้ความแตกต่างของประสิทธิภาพกำลังลดลงฉันคิดว่า Swing เป็นตัวเลือกที่ดีกว่าสำหรับแอปพลิเคชันมาตรฐานของคุณ SWT / Eclipse มีกรอบงานที่ดีซึ่งจะช่วยให้มีรหัสจานหม้อไอน้ำจำนวนมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.