Những nhược điểm nào của khung Java GUI GUI có? [đóng cửa]


10

Tôi đã sử dụng Java Swing cho một số ứng dụng máy tính để bàn. Nhưng tôi đã không sử dụng các khung GUI khác nhiều đến mức tôi không thể so sánh chúng.

Chắc chắn có một số thứ tôi thích với Swing và một số thứ tôi không thích, nhưng đó là tình huống với hầu hết mọi thứ.

Những nhược điểm lớn nhất với khung công tác Java Swing GUI là gì?


2
Câu hỏi là can thiệp. Tôi cũng tự hỏi đâu là điểm mạnh và điểm yếu của Swing, so với QT, GTK, SWT, Winforms, Ca cao và những thứ tương tự. Có lẽ bạn nên viết lại tiêu đề để yêu cầu so sánh , thay vì nhược điểm (có xu hướng mang lại câu trả lời không được tranh luận tốt)
barjak

Câu trả lời:


3
  1. Bạn phải cài đặt java ở đâu đó. Tất nhiên điều này đúng với tất cả các khung GUI, nhưng java có nhận thức về một con khỉ đột nặng 2 tấn. Nó đã được tải tốt hơn, nhưng những ngày đầu tiên của java đã khiến rất nhiều người bỏ cuộc. Nếu bạn chỉ cần nó để chạy một ứng dụng của mình, thì rất nhiều bảo trì để cập nhật ứng dụng với các bản vá bảo mật và những thứ tương tự. Mọi người đều phải có Flash cho youtube, .Net framework cài đặt phía sau hậu trường và mọi người đều bật javascript trên trình duyệt của họ. Java thường là một điều bổ sung để làm.

  2. Mặc dù nó chỉ là viết một lần, chạy ở bất cứ đâu, bạn vẫn thấy rằng Mac OSX không có thứ mới lạ này mà bạn muốn sử dụng hoặc một khách hàng từ chối nâng cấp linux mandrake của họ qua JRE 1.4.

  3. Là một dev, bạn phải suy nghĩ về luồng. Và đó là một cách khó khăn, vì đa luồng là có thể nhưng swing giả vờ như tất cả chỉ là một luồng. Nhưng sau đó, một nửa các thư viện bạn kéo vào có một số mức độ đa luồng và giả định rằng bạn biết về EDT invokeLater và nó buộc rất nhiều bài học một cách khó khăn.

  4. Trải nghiệm swing không chuyển dễ dàng sang các loại phát triển UI khác. Chẳng hạn, nếu bạn là người thích các bảng trong .css, bạn sẽ hoàn toàn bị Jtables, trình kết xuất, trình chỉnh sửa, v.v.

Nói chung, vấn đề chính với Swing là nó không sống theo cách nó được bán trên thị trường. Đó là một công nghệ hoàn toàn phù hợp cho rất nhiều trường hợp sử dụng, nhưng 5 hoặc 6 năm đầu tiên đó chứa đầy những triển khai khủng khiếp và những tràng pháo tay tàn bạo. Và bây giờ là công nghệ cũ - trên Web 3.0 hoặc bất cứ điều gì.

Tất cả những gì đã nói, tôi thích Swing và nghĩ rằng những ưu điểm thường vượt trội hơn những nhược điểm khi bạn cần những gì nó cung cấp. Tuy nhiên, trải nghiệm web rất phổ biến hiện nay khi nhiều người dùng sẽ có một thời gian dễ dàng hơn với một ứng dụng web so với ứng dụng swing tuyệt vời được sắp xếp hợp lý nhất. Và có những ứng dụng Swing tuyệt vời ngoài kia, nhưng chúng dường như không phải là chủ đạo.


1
Tôi đang ở trong tình trạng tương tự như OP: Tôi biết Swing và tôi bị can thiệp khi so sánh nó với các giao diện GUI khác. Đối với tôi, điểm 1, 2 và 4 không liên quan đến câu hỏi. Vì vậy, tôi muốn phản ứng với điểm 3: bạn có thể đưa ra một số ví dụ về bộ công cụ GUI đa luồng không? Cảm ơn.
barjak

2
@barjak: GUI đa luồng là một sai lầm. Người duy nhất tôi biết là AWT Java cũ. Nhưng họ đã học được từ những sai lầm khi họ thiết kế Swing, một luồng đơn như tất cả các khung GUI hiện đại.
Jonas

@Jonas Làm cho nhà phát triển nghĩ về đa luồng thường là một sai lầm, nhưng bạn không thể chạy hình động, thực hiện cuộc gọi RMI hoặc tính toán cường độ cao (đây là bộ công cụ máy khách béo, hãy nhớ) mà không có mức độ đa luồng.
Steve Jackson

3
@Steve: Đó là sự thật. Nhưng bạn không nên thực hiện các cuộc gọi RMI và tính toán cường độ cao trong luồng GUI. Đó là những điều nên được thực hiện trong một chủ đề nền, như trong Swing và WPF.
Jonas

@barjak - Các biểu mẫu Windows, MFC, SWT, pyQT, Juce .... Tôi đang gặp khó khăn hơn khi nghĩ về các biểu mẫu không đa luồng. Mặc dù vậy, các quy tắc tương tự thường được áp dụng, bạn không thể chạm vào các thành phần GUI của mình ngoại trừ từ luồng đã tạo ra chúng.
Steve Jackson

2

Giô-na,

Swing khái quát kiến ​​trúc cơ bản của bạn để cung cấp cho bạn trải nghiệm người dùng trung lập nền tảng. Thành phần hạng nặng duy nhất (do HĐH cung cấp) là bộ chứa JFrame và phần còn lại được xử lý khá nhiều bởi công cụ Swing. Mặt khác, AWT yêu cầu HĐH vẽ tất cả các thành phần UI của nó, điều đó có nghĩa là nó nhanh hơn bằng nhiều cách khi bạn sử dụng các thành phần UI gốc dành riêng cho HĐH. SWT cố gắng đạt được điểm trung bình, đối với các thành phần tiêu chuẩn khác nhau như nút và nhãn (có sẵn trên hầu hết các hệ điều hành), nó cho phép HĐH xử lý các thành phần đó và đối với các thành phần chuyên dụng khác, SWT sẽ xử lý việc tạo cho bạn.

Điều đó đã được nói, tôi có thể phác thảo những nhược điểm.

(1) Vì bộ công cụ tạo và kết xuất các thành phần cho bạn thay vì hỏi HĐH, bạn không được tận dụng tốc độ của các thành phần tích hợp do HĐH cung cấp.

(2) Giao diện người dùng không quá phức tạp vì nó trông xa lạ với hầu hết các nền tảng HĐH liên quan đến giao diện bạn sử dụng.

(3) Một số trình quản lý bố cục, ví dụ như GridBadLayout, v.v. có thể được đơn giản hóa tốt hơn. Tôi đã mất số lượng dự án tôi đã làm việc ở đó mọi người đã bọc GridBagLayout trong một số mã bespoke để có được cách sử dụng đơn giản hơn.

Tôi khuyên bạn nên viết một ứng dụng đơn giản trong AWT, Swing và SWT và so sánh sự phát triển tiếp cận sản phẩm cuối cùng giữa tất cả chúng, sau đó xem xét các nhận xét khác nhau từ các nhà phát triển khác và quyết định xem ứng dụng nào hoạt động tốt nhất. Tôi đã làm việc với Swing trong nhiều năm và tôi đã sử dụng không thích SWT, nhưng tôi nhận ra rằng Swing phức tạp hơn rất nhiều so với những khuôn khổ khác ngoài kia.


4
Swing được tăng tốc GPU , điều mà các khung công tác gốc không thường xuyên, vì vậy tôi thực sự nghĩ rằng Swing nhanh hơn. Đây cũng là chiến lược mà WPF trên Windows có nhưng không phải WinForms (chỉ trên một số phiên bản Windows). Làm thế nào "[xấu xí] ... liên quan đến giao diện bạn sử dụng" có thể đúng như thế nào khi nó rất tùy biến hoặc bạn có thể sử dụng LaF sở hữu nền tảng? Tôi đồng ý rằng các nhà quản lý bố trí là thực sự xấu.
Jonas

Jonas, Đó là khía cạnh "tùy biến" của swing khiến nó trở nên khó khăn so với các khung công tác khác. Nếu bạn cố gắng trừu tượng hóa các tính năng mà HĐH mang lại cho bạn, thì bạn sẽ mất đi nhiều lợi ích mà nó mang lại. Phiên bản đầu tiên của Swing là một cơn ác mộng, dẫn đến việc tạo ra SWT ngay từ đầu. Sau đó, Swing được cải thiện nhanh hơn rất nhiều và bạn đã có các lớp như SwingUtilities cung cấp hỗ trợ luồng tốt hơn cho GUI.
Hành tinh hoang vắng

Xấu xí có thể là từ sai; người ngoài hành tinh có thể là một từ tốt hơn vì giao diện không giống hệt như giao diện UI gốc, từ những gì tôi nhớ, bạn đã có Java, mô-đun, kim loại và một vài thứ khác, nhưng nói chung, chúng không phải là ' t tất cả đều đẹp
Hành tinh hoang vắng

Điều tiếp theo cần xem xét khi thực hiện so sánh là nỗ lực liên quan đến việc phát triển UI. Tôi sẽ không nói rằng các trình quản lý bố cục thực sự tồi tệ, tốt hơn là không có bố cục nào cả (mà tôi phải giải quyết trong công việc trên thiết bị di động), nhưng họ không nỗ lực để đơn giản hóa mô hình.
Hành tinh hoang vắng

Tôi nghĩ dựa trên những gì bạn đã nói, bạn đã sử dụng phiên bản mới hơn của Swing, nhưng khi nó ra mắt, mọi người đã không thích nó và thậm chí còn hơn thế khi họ cố gắng cung cấp các applet dựa trên Swing. Có rất nhiều lịch sử đối với các khung UI được phát triển bằng Java và đó là một bài đọc thú vị nếu bạn nhìn vào nó.
Hành tinh hoang vắng

-2

Swing là chậm (hiệu suất kém), khó sử dụng / vụng về (so với nhiều người khác) và nó trông không tốt lắm, trên thực tế rất xấu, trên một số nền tảng.


5
Tôi thấy nó nhanh (nó có khả năng tăng tốc GPU, so với nhiều GUI gốc) vì vậy tôi không thể đồng ý với hiệu suất hoặc bạn có ví dụ nào không? Làm thế nào là nó khó khăn và vụng về so với các khuôn khổ khác? Tôi đồng ý rằng nó trông không đẹp nhưng nó có thể được cấu hình để trông giống như các ứng dụng gốc hoặc sử dụng LaF tùy chỉnh.
Jonas

Nó trông ít nhiều luôn không phải là bản địa trên GTK. Những gì tôi đã nghe là bởi vì nó dựa vào Java 2D để vẽ các widget, nó chậm, nhưng tôi không có gì để chứng minh điều đó với. Cả Qt và GTK đều cảm thấy bớt vụng về với tôi, nhưng thị hiếu khác nhau.
Anto

Ah, nó có thể hoạt động kém hơn trên một số nền tảng. Tôi chỉ sử dụng nó trên Windows khi GPU được tăng tốc và rất nhanh.
Jonas

6
Mọi người vẫn phàn nàn rằng một cái gì đó không có vẻ tự nhiên, trong khi sử dụng ngày càng nhiều thứ trên trình duyệt (nghĩ: stackexchange), nơi mỗi trang trông khác nhau? Và tốc độ? Hầu hết thời gian, một chương trình GUI tương tác đang chờ người dùng.
người dùng không xác định

2
Hầu hết các chương trình "hợp thời trang" không trông giống bản địa nữa. Swing kết thúc không tốt hơn hoặc tồi tệ hơn trong vấn đề đó. Hiệu suất của ứng dụng swing 50kloc của chúng tôi (khách hàng béo) có vẻ ổn. Dễ dàng hơn nhiều để có được chuyển đến một điểm không bị sập so với các ứng dụng "bản địa".
Tim Williscroft
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.