Ứng dụng Java Desktop: SWT so với Swing [đã đóng]


158

Tôi là một nhà phát triển web vào ban ngày và suy nghĩ về việc xây dựng ứng dụng máy tính để bàn thực sự đầu tiên của mình. Ý tưởng là xây dựng một công cụ tự động hóa một nhiệm vụ rất lặp đi lặp lại trong một ứng dụng web nơi không có API.

Tôi biết tôi muốn sử dụng Java. Tôi đã sử dụng nó trước đây cho các công cụ web, biết cú pháp khá tốt và muốn ứng dụng được thể hiện chéo dễ dàng nhất có thể.

Trường hợp tôi không chắc chắn là liệu tôi nên sử dụng SWT hay Swing. Vì khán giả chính của tôi sử dụng Windows, tôi muốn xem nó như bản địa nhất có thể ở đó. Linux và Mac nên hoạt động, nhưng ngoại hình không quá quan trọng ở đây.

Vì vậy, các đối số cho và chống lại từng UI UI, Swing hoặc SWT là gì?

Cảm ơn.

PS: Tôi phát triển trên Windows bằng Eclipse. Nhưng đã suy nghĩ về việc chơi với Netbeans.


Câu hỏi khó. :-) Tôi sẽ đi với Swing. Nhưng, không có PRO hoặc CON cho quyết định đó.
Pablo Santa Cruz

trùng lặp Q. vui lòng tìm kiếm Swing so với SWT Q đã hỏi trên SO. FWIW, tôi sử dụng Swing chỉ vì tôi đã học theo cách đó. Có thư viện giao diện bản địa (xem jgoodies ngoại hình)
Jason S

"Xây dựng một công cụ tự động hóa một nhiệm vụ rất lặp đi lặp lại trong một ứng dụng web" - có thông tin nào về điều này không? Có thể có một công cụ hiện có - và tôi đặt câu hỏi về sự cần thiết của một ứng dụng máy tính để bàn để tự động hóa ứng dụng này - nó có thể hoạt động trong trường hợp của bạn ngay bây giờ - nhưng nếu bạn chuyển sang một giải pháp lưu trữ thì sao?
Nate

Bạn không cần phải học khung GUI cho ứng dụng máy tính để bàn. Nếu bạn có thể sử dụng html css và js (mà tôi giả sử là bạn), bạn có thể sử dụng Electron để xây dựng các ứng dụng tìm kiếm gốc với ngôn ngữ web.
Pranav A.

Electron đã được phát minh một vài năm sau khi tôi hỏi câu hỏi này;) Nhưng tất nhiên hôm nay bạn đã đúng.
janpio

Câu trả lời:


152

Ưu điểm:

  • một phần của thư viện java, không cần thêm thư viện riêng
  • hoạt động theo cùng một cách trên tất cả các nền tảng
  • Trình soạn thảo GUI tích hợp trong Netbeans và Eclipse
  • hướng dẫn trực tuyến tốt của Sun / Oracle
  • Được hỗ trợ bởi các phần mở rộng java chính thức (như java OpenGL)

Nhược điểm

  • Giao diện bản địa có thể hành xử khác với hệ thống bản địa thực sự.
  • các thành phần nặng (bản địa / awt) ẩn các thành phần swing, hầu như không phải là vấn đề vì việc sử dụng các thành phần nặng là khá hiếm

Ưu điểm SWT:

  • sử dụng các yếu tố bản địa khi có thể, vì vậy luôn luôn hành vi bản địa
  • được hỗ trợ bởi nhật thực, trình soạn thảo gui VEP (VEP cũng hỗ trợ Swing và AWT)
  • số lượng lớn các ví dụ trực tuyến
  • có một cầu nối awt / swt tích hợp để cho phép sử dụng các thành phần awt và swing

Nhược điểm SWT:

  • yêu cầu thư viện riêng cho từng hệ thống được hỗ trợ
  • có thể không hỗ trợ mọi hành vi trên tất cả các hệ thống vì tài nguyên gốc được sử dụng (tùy chọn gợi ý)
  • quản lý tài nguyên bản địa, trong khi các thành phần gốc thường sẽ được xử lý với cha mẹ của chúng, các tài nguyên khác như Phông chữ phải được phát hành thủ công hoặc đăng ký dưới dạng lắng nghe cho một thành phần để phát hành tự động.

33
Swing sẽ gần hơn để "viết một lần, chạy bất cứ nơi nào". SWT sẽ giống như "viết một lần, chỉnh sửa / kiểm tra mọi nơi". Nhưng cuộc thảo luận này cũng xảy ra với các ngôn ngữ khác.
Đánh dấu

12
Trên thực tế, giao diện "Bản địa" của Swing hoạt động khác biệt đáng kể so với máy tính để bàn Gnome của tôi - trong khi, vì một số lý do, các chủ đề hoạt động khá tốt, các menu trông khủng khiếp và gần như không thể sử dụng được.
Hut8

9
Bắt đầu với Eclipse 3.7, VEP đã được thay thế bởi WindowBuilder (cũng hỗ trợ cả Swing và SWT).
Alexey Romanov

6
Lợi thế của SWT cũng ít tiêu hao bộ nhớ hơn do các thành phần gốc. Điều này nên được mong muốn trên các máy có sự khác biệt về bộ nhớ và bộ nhớ hạn chế giữa swing và swt có thể lớn trong các thiết kế GUI lớn.
jantobola

1
@JanTobola Hoàn toàn sai. Các thành phần gốc sử dụng bộ nhớ được phân bổ trên vùng heap riêng, không chỉ trên vùng heap Java. Tôi đã làm việc trên các GUI lớn bằng Netbeans Platform, Eclipse RCP, SWT và Swing. Có một số mối quan tâm nghiêm trọng về dấu chân bộ nhớ trong Swing trong các phiên bản đầu tiên của Java (khi đó là thư viện của bên thứ ba và sau 1.1 đến 1.2? ) nhưng điều đó không còn đúng nữa và tùy thuộc vào các nhà phát triển để phát hành nhiều tài nguyên trong SWT, sẽ có nhiều cơ hội rò rỉ bộ nhớ hơn với SWT trong khi một thành phần không được kiểm soát kết thúc bằng cách "xử lý" với Swing.
gouliej

63

Một điều quan trọng cần xem xét là một số người dùng và một số đại lý (Dell) cài đặt máy ảo 64 bit trên Windows 64 bit của họ và bạn không thể sử dụng cùng thư viện SWT trên máy ảo 32 bit và 64 bit.

Điều này có nghĩa là bạn sẽ cần phân phối và kiểm tra các gói khác nhau tùy thuộc vào việc người dùng có máy ảo Java 32 bit hay 64 bit. Ví dụ, xem vấn đề này với Azureus, nhưng bạn cũng gặp vấn đề với Eclipse, trong đó cho đến ngày hôm nay, các bản dựng trên trang tải xuống phía trước không chạy trên máy ảo 64 bit.


2
Điểm thú vị. Là một người dùng, tôi vẫn còn loạng choạng tại sao đây lại là một vấn đề lớn như vậy. Nhưng tốt, nó là như vậy tôi sẽ phải xem xét điều này. Cảm ơn.
janpio

btw: javaws (webstart) không khả dụng cho 64 IMHO
Karussell

1
@Karussell: Kể từ 3/4/2011, JVM 64 bit của Windows có hỗ trợ JNLP. Tôi nghĩ điều đó đã đúng trong một thời gian, nhưng tôi không chắc là bao lâu.
Nhà giả kim

23

đu chuyên nghiệp:

  • Ưu điểm lớn nhất của swing IMHO là bạn không cần gửi các thư viện cùng với ứng dụng của mình (điều này tránh được hàng tá MB (!)).
  • Cái nhìn và cảm nhận bản địa là tốt hơn cho swing so với những năm đầu
  • hiệu suất tương đương với swt (swing không chậm!)
  • NetBeans cung cấp Matisse như một công cụ xây dựng thành phần thoải mái.
  • Việc tích hợp các thành phần Swing trong JavaFX dễ dàng hơn.

Nhưng ở dòng dưới cùng, tôi sẽ không đề xuất sử dụng swing hoặc swt 'thuần' ;-) Có một số khung ứng dụng cho swing / swt out. Nhìn đây . Những người chơi lớn nhất là netbeans (swing) và nhật thực (swt). Một khung công tác đẹp khác có thể là khung hình và một 'bộ linh kiện' đẹp mắt là trục (xoay). Griffon rất thú vị vì nó tích hợp rất nhiều thư viện và không chỉ xoay ; cũng xoay, swt, vv


1
Có NetBeans có Matisse là trình xây dựng GUI, nhưng mã thực sự dài dòng, khó đọc và bên cạnh không thể chỉnh sửa bằng mã nguồn. Nếu bạn thực sự muốn một trình xây dựng GUI, hãy đi với eclipses WindowBuilder
Pranav A.

13

Tôi sẽ sử dụng Swing cho một vài lý do.

  • Nó đã tồn tại lâu hơn và đã có nhiều nỗ lực phát triển hơn được áp dụng cho nó. Do đó, nó có khả năng hoàn thiện nhiều tính năng hơn và (có thể) có ít lỗi hơn.

  • Có rất nhiều tài liệu và hướng dẫn khác về sản xuất các ứng dụng biểu diễn.

  • Có vẻ như các thay đổi đối với Swing lan truyền đến tất cả các nền tảng trong khi các thay đổi đối với SWT dường như xuất hiện trên Windows trước, sau đó là Linux.

Nếu bạn muốn xây dựng một ứng dụng rất giàu tính năng, bạn có thể muốn kiểm tra NetBeans RCP (Nền tảng khách hàng phong phú). Có một đường cong học tập, nhưng bạn có thể nhanh chóng kết hợp các ứng dụng tốt với một chút luyện tập. Tôi không có đủ kinh nghiệm với nền tảng Eclipse để đưa ra đánh giá hợp lệ.

Nếu bạn không muốn sử dụng toàn bộ RCP, NetBeans cũng có nhiều thành phần hữu ích có thể được rút ra và sử dụng độc lập.

Một lời khuyên khác, nhìn vào các nhà quản lý bố trí khác nhau. Họ vấp tôi rất lâu khi tôi đang học. Một số tốt nhất thậm chí không có trong thư viện tiêu chuẩn. Các công cụ MigLayout (cho cả Swing và SWT) và Joodies Forms là hai trong số tốt nhất theo quan điểm của tôi.



8

Đối với các yêu cầu của bạn, có vẻ như điểm mấu chốt sẽ là sử dụng Swing vì việc bắt đầu dễ dàng hơn một chút và không được tích hợp chặt chẽ với nền tảng gốc như SWT.

Xoay thường là đặt cược an toàn.


6

Câu hỏi thú vị. Tôi không biết SWT quá rõ để khoe khoang về nó (không giống như Swing và AWT) nhưng đây là so sánh được thực hiện trên SWT / Swing / AWT.

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

Và đây là trang web nơi bạn có thể nhận hướng dẫn về cơ bản mọi thứ trên SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

Hy vọng bạn đưa ra quyết định đúng (nếu có quyết định đúng trong mã hóa) ... :-)


4
Nhưng hãy lưu ý bài viết là từ năm 2003 ...
Alexey Romanov

4

Nếu bạn có kế hoạch xây dựng một ứng dụng chức năng đầy đủ với hơn một số tính năng, tôi sẽ đề nghị chuyển ngay sang sử dụng RCP Eclipse làm khung.

Nếu ứng dụng của bạn không phát triển quá lớn hoặc yêu cầu của bạn quá độc đáo để được xử lý bởi khung kinh doanh thông thường, bạn có thể nhảy một cách an toàn với Swing.

Vào cuối ngày, tôi khuyên bạn nên thử cả hai công nghệ để tìm ra một bộ đồ phù hợp với bạn hơn. Giống như Netbeans vs Eclipse vs IntelliJ, không có câu trả lời chính xác tuyệt đối ở đây và cả hai khung đều có nhược điểm riêng.

Xoay chuyên nghiệp:

  • nhiều chuyên gia
  • giống Java hơn (hầu như không có trường công khai, không cần xử lý tài nguyên)

SWT chuyên nghiệp:

  • thêm hệ điều hành
  • nhanh hơn

10
Tôi nghĩ rằng điểm "nhanh hơn" gây tranh cãi cao.
Russ Hayward

SWT rất khó sử dụng, tôi đã phải kiểm tra GUI của mình với từng phiên bản Windows, một số lỗi chỉ có thể sao chép trong Windows Vista. Một số phương pháp chỉ đơn giản là không được thực hiện hoặc gọi AWT dưới mui xe, điều đó có nghĩa là bạn không thể sử dụng JRE nhỏ gọn mà không có AWT và Swing mà không có nguy cơ phá vỡ SWT. Tôi bắt đầu sử dụng SWT vào năm 2009 và theo ý kiến ​​khiêm tốn của tôi, nó không nhanh hơn. Tôi khuyên bạn nên cung cấp một tiêu chuẩn được thiết kế cẩn thận.
gouliej

4

Một điều cần xem xét: Đọc màn hình

Vì một số lý do, một số thành phần Swing không hoạt động tốt khi sử dụng trình đọc màn hình (và Java AccessBridge cho Windows). Biết rằng các trình đọc màn hình khác nhau dẫn đến hành vi khác nhau. Và theo kinh nghiệm của tôi, SWT-Tree thực hiện tốt hơn rất nhiều so với Cây xoay kết hợp với bộ đọc màn hình. Do đó, ứng dụng của chúng tôi đã kết thúc bằng cách sử dụng cả hai thành phần SWT và Swing.

Để phân phối và tải thư viện SWT thích hợp, bạn có thể tìm thấy liên kết này hữu ích: http://www.chrisnewland.com/select-c chính -swt-ra-for-your-os-and-jvm-at-r nb-19


3

SWT được tạo ra như một phản ứng với sự chậm chạp của Swing vào đầu thế kỷ. Bây giờ sự khác biệt về hiệu suất đang trở nên không đáng kể, tôi nghĩ rằng Swing là một lựa chọn tốt hơn cho các ứng dụng tiêu chuẩn của bạn. SWT / Eclipse có một khung công tác tốt giúp nhiều mã tấm nồi hơi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.