แอ็พพลิเคชัน 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.