Java Swing GUI çerçevesinin ne gibi sakıncaları vardır? [kapalı]


11

Bazı masaüstü uygulamaları için Java Swing kullandım. Ama diğer GUI çerçevelerini o kadar fazla kullanmadım ki onları karşılaştıramıyorum.

Swing ile sevdiğim bazı şeyler ve sevmediğim bazı şeyler var, ama neredeyse her şeyde durum bu.

Java Swing GUI çerçevesinin en büyük dezavantajları nelerdir?


2
Soru iç içe geçiyor. Ben de QT, GTK, SWT, Winforms, Cocoa ve benzerlerine kıyasla Swing'in güçlü ve zayıf yönlerinin ne olduğunu merak ediyorum. Belki de dezavantajlar yerine (iyi tartışılmış cevaplar getirme eğiliminde değil) karşılaştırma istemek için başlığı yeniden
yazmalısınız

Yanıtlar:


3
  1. Java'nın bir yere yüklenmiş olması gerekir. Bu elbette tüm GUI çerçeveleri için geçerlidir, ancak java 2 tonluk bir goril algısına sahiptir. Daha iyi yükler aldı, ama bu erken java uygulaması günleri birçok insanı kapattı. Yalnızca bir uygulamanızı çalıştırmak için ihtiyacınız varsa, güvenlik yamaları ve benzerleriyle güncel tutmak çok bakım gerektirir. Herkes youtube için Flash'a sahip olmalı, .Net çerçeve perde arkasına yüklenir ve herkes tarayıcılarında javascript'i etkinleştirir. Java genellikle ekstra bir şeydir.

  2. Her ne kadar bir kez yazılsa da, her yerde çalıştırın, yine de Mac OSX'in kullanmak istediğiniz bu yeni çerçeveli şeye sahip olmadığını veya bir istemcinin mandrake linux'unu JRE 1.4'ü yükseltmeyi reddettiğini görüyorsunuz.

  3. Bir geliştirici olarak, iplik geçirmeyi düşünmelisiniz. Ve çok iş parçacığı mümkün olduğu için zor bir şekilde ama salıncak tek iş parçacıklıymış gibi davranıyor. Ama sonra çektiğiniz kitaplıkların yarısında bir dereceye kadar çoklu iş parçacığı var ve EDT invokeLater hakkında bilgi sahibi olduğunuzu varsayın ve birçok dersi zor yoldan zorlar.

  4. Salıncak deneyimi diğer UI geliştirme türlerine kolayca aktarılmaz. Örneğin, .css içindeki tablolarda bir vızıltıysanız, Jtables, oluşturucular, editörler vb. Tarafından tamamen yönlendirilirsiniz.

Genel olarak, Swing ile ilgili temel sorun, nasıl pazarlandığına uymamasıdır. Birçok kullanım durumu için mükemmel bir teknoloji, ancak ilk 5 veya 6 yıl korkunç uygulamalar ve iğrenç uygulamalar ile doluydu. Ve şimdi eski bir teknoloji - Web 3.0 ya da her neyse.

Tüm söylenenler, Swing'i seviyorum ve sunduğu şeylere ihtiyacınız olduğunda profesyonellerin eksilerini ağır bastığını düşünüyorum. Ancak web deneyimi o kadar yaygın ki, birçok kullanıcı bir web uygulamasıyla en aerodinamik şaşırtıcı salıncak uygulamasından daha kolay bir zaman geçirecek. Ve orada harika Swing uygulamaları var, ancak ana akım gibi görünmüyorlar.


1
OP ile aynı durumdayım: Swing'i biliyorum ve bunu diğer GUI halledikleriyle karşılaştırmakla meşgul oldum. Benim için 1, 2 ve 4 numaralı noktalar soru ile ilgisizdir. Bu yüzden, 3. maddeye tepki vermek istiyorum: çok iş parçacıklı GUI araç setlerine bazı örnekler verebilir misiniz? Teşekkürler.
11:39

2
@barjak: Çok iş parçacıklı GUI bir hatadır. Tek bildiğim eski Java AWT. Ancak tüm modern GUI çerçeveleri gibi tek iş parçacıklı Swing'i tasarlarken hatalardan öğrendiler.
Jonas

@Jonas Bir geliştiricinin multithreading hakkında düşünmesini sağlamak genellikle bir hatadır, ancak bir dereceye kadar multithreading olmadan animasyonlar çalıştıramaz, RMI çağrıları yapamaz veya yoğun hesaplama yapamazsınız (bu bir yağ istemci araç takımıdır, unutmayın).
Steve Jackson

3
@Steve: Bu doğru. Ama gerektiği değil RMI aramaları ve GUI-iplik yoğun hesaplamaları yapmak. Bu tür şeyler Swing ve WPF'de olduğu gibi bir arka plan iş parçacığında yapılmalıdır.
Jonas

@barjak - Windows formları, MFC, SWT, pyQT, Juce .... Çok iş parçacıklı olmayanları düşünmekte zorlanıyorum. Aynı kurallar genellikle geçerlidir, ancak onları oluşturan iş parçacığı dışında GUI bileşenlerinize dokunamazsınız.
Steve Jackson

2

Jonas,

Swing, size platformdan bağımsız bir kullanıcı deneyimi sunmak için temel mimarinizi genelleştirir. Tek ağır ağırlık bileşeni (işletim sistemi tarafından sağlanan) JFrame kapsayıcısıdır ve geri kalanı da Swing takeit tarafından ele alınır. Diğer taraftan AWT, işletim sisteminden tüm UI bileşenlerini çizmesini ister, bu da işletim sistemine özgü yerel UI bileşenlerini kullandığınızdan çok daha hızlı olduğu anlamına gelir. SWT, bir orta yol elde etmeye çalışır, düğmeler ve etiketler gibi çeşitli standart bileşenler için (çoğu işletim sisteminde bulunur), işletim sisteminin bunlarla uğraşmasına izin verir ve diğer özel bileşenler için SWT sizin için yaratılışın üstesinden gelecektir.

Bununla birlikte, sakıncaları özetleyebilirim.

(1) Araç seti işletim sistemini sormak yerine bileşenleri sizin için oluşturup oluşturduğundan, işletim sistemi tarafından sağlanan yerleşik bileşenlerin hızından yararlanamazsınız.

(2) Kullanıcı arayüzü, hangi görünüm ve hissi kullandığınıza ilişkin olarak çoğu işletim sistemi platformuna yabancı göründüğü için kısmen karmaşık değildir.

(3) GridBadLayout vb. Gibi mizanpaj yöneticilerinden bazıları daha basitleştirilebilir. Ben insanların kullanmak için daha basit bir yol elde etmek için bazı ısmarlama kod GridBagLayout sarılmış nerede üzerinde çalıştığım proje sayısını kaybettim.

AWT, Swing ve SWT'de basit bir uygulama yazmanızı ve geliştirme yaklaşımlarını aralarında bir nihai ürünle karşılaştırmanızı, ardından diğer geliştiricilerden yapılan çeşitli yorumları gözden geçirip hangisinin en iyi olduğuna karar vermenizi öneririm. Swing ile uzun yıllar çalıştım ve SWT'yi sevmedim, ama Swing'in diğer çerçevelere kıyasla olması gerekenden çok daha karmaşık olduğunu fark ettim.


4
Swing, yerel çerçevelerin sıklıkla olmadığı GPU ile hızlandırılmıştır , bu yüzden Swing'in daha hızlı olduğunu düşünüyorum. Bu aynı zamanda Windows'taki WPF'nin WinForms'a sahip olduğu, ancak olmadığı stratejidir (sadece bazı Windows sürümlerinde). "[Çirkin] ... kullandığınız görünüm ve his konusunda" çok özelleştirilebilir olduğunda veya platformları kendi LaF'lerinizle nasıl kullanabilirsiniz? Düzen yöneticilerinin gerçekten kötü olduğunu kabul ediyorum.
Jonas

Jonas, Salınmanın "özelleştirilebilir" yönü, onu diğer çerçevelere kıyasla zorlaştırıyor. İşletim sisteminin size sunduğu özelliklerden soyutlamaya çalışırsanız, sunduğu avantajların çoğunu kaybedersiniz. Swing'in ilk versiyonu bir kabustu, bu da ilk olarak SWT'nin yaratılmasına yol açtı. Daha sonra Swing çok daha hızlı olacak şekilde geliştirildi ve GUI'ler için daha iyi iş parçacığı desteği sunan SwingUtilities gibi sınıflarınız var.
Issız Gezegen

Çirkin yanlış kelime olabilir; uzaylı daha iyi bir kelime olabilir, çünkü görünüm ve his yerel UI görünümü ve hissi ile tam olarak aynı değildir, hatırladığım kadarıyla Java, motif, metal ve birkaç tane daha var, ancak genel olarak o kadar güzel değil.
Desolate Planet

Bir karşılaştırma yaparken bakılacak bir sonraki şey, bir kullanıcı arayüzü geliştirmedeki çaba. Düzen yöneticilerinin gerçekten kötü olduğunu söyleyemem, hiç bir düzenden daha iyi (ki bir mobil cihazda işte uğraşmak zorundayım), ancak modeli basitleştirmek için hiçbir çaba sarf etmiyorlar.
Issız Gezegen

Bence söylediklerinize dayanarak, Swing'in daha yeni sürümünü kullanıyorsunuz, ancak ilk çıktığında, insanlar buna karşı güçlü bir hoşnutsuzluk aldı ve daha da fazla Swing tabanlı uygulamalar sağlamaya çalıştıklarında. Java'da geliştirilen UI çerçevelerinin çok fazla tarihi var ve içine bakarsanız ilginç bir okuma.
Issız Gezegen

-2

Salıncak yavaş (kötü performans), kullanımı zor / beceriksiz (diğerlerine kıyasla) ve bazı platformlarda çok iyi, aslında çok kötü görünmüyor.


5
Hızlı buluyorum (birçok yerel GUI'ye kıyasla GPU hızlandırması var), bu yüzden performansa katılamıyorum veya herhangi bir örneğiniz var mı? Diğer çerçevelere kıyasla nasıl zor ve sakar? İyi görünmediğini kabul ediyorum, ancak yerel uygulamalar gibi görünecek veya özel bir LaF kullanacak şekilde yapılandırılabilir.
Jonas

GTK'da aşağı yukarı her zaman yerli olmayan görünüyor. Duyduğum şey, widget'ları çizmek için Java 2D'ye dayanması, yavaş olması, ancak bunu kanıtlayacak hiçbir şeyim olmaması. Hem Qt hem de GTK benim için daha az sakar hissediyor, ancak lezzetler farklı.
Anto

Ah, bazı platformlarda daha kötü performans gösterebilir. Sadece GPU hızlandırılmış ve çok hızlı olduğu Windows'ta kullandım.
Jonas

6
İnsanlar hala her sayfanın farklı göründüğü daha fazla tarayıcı öğesi (düşünmek: stackexchange) kullanırken bir şeyin yerel görünmediğinden şikayet ediyorlar mı? Ve hız? Çoğu zaman, etkileşimli bir GUI programı kullanıcıyı bekliyor.
kullanıcı bilinmiyor

2
Çoğu "popüler" program artık yerel görünmüyor. Salınım bu konuda daha iyi veya daha kötü sonuçlanmaz. Bizim 50kloc salıncak uygulamasının (şişman müşteri) performansı iyi görünüyor. "Yerel" uygulamalara göre çökme noktasına gelmek çok daha kolay.
Tim Williscroft
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.