Java Desktop uygulaması: SWT vs. Swing [kapalı]


158

Gündüz bir web geliştiricisiyim ve ilk gerçek masaüstü uygulamamı oluşturmayı düşünüyorum. Buradaki fikir, API bulunmayan bir web uygulamasında çok tekrar eden bir görevi otomatikleştiren bir araç oluşturmaktır.

Java kullanmak istediğimi biliyorum. Daha önce web şeyler için kullandım, sözdizimini oldukça iyi biliyorum ve uygulamanın çapraz platform olabildiğince kolay olmasını istiyorum.

O kadar emin olmadığım yerde SWT veya Swing kullanmam gerekecek. Ana izleyicim Windows'u kullandığından, orada olabildiğince yerel görünmek istiyorum. Linux ve Mac çalışmalı, ancak görünüm burada çok önemli değil.

Peki her UI Framework, Swing veya SWT için ve ona karşı argümanlar nelerdir?

Teşekkürler.

PS: Eclipse kullanarak Windows üzerinde geliştiriyorum. Ama Netbeans ile oynamayı düşünüyordum.


Zor soru. :-) Swing ile giderdim. Ancak, bu karar için hiçbir PRO veya CON yoktur.
Pablo Santa Cruz

yinelenen S. SO'da sorulan SWT Q'ların Swing'e karşılık bakın. FWIW, Swing'i sadece bu şekilde öğrendiğim için kullanıyorum. Yerli görünüm ve kitaplıklar vardır (bkz. Jgoodies bakar)
Jason S

"bir web uygulamasında çok tekrarlayan bir görevi otomatikleştiren bir araç oluşturmak" - bu konuda herhangi bir bilgi? Mevcut bir araç olabilir - ve bunu otomatikleştirmek için bir masaüstü uygulamasına ihtiyaç duyduğumu soruyorum - şu anda sizin durumunuzda işe yarayabilir - ama barındırılan bir çözüme geçerseniz ne olur?
Nate

Bir masaüstü uygulaması için bir GUI çerçevesi öğrenmenize gerek yoktur. Html css ve js (ki varsayalım ki) kullanabilirsiniz, web dilleri ile yerel görünümlü uygulamalar oluşturmak için Electron kullanabilirsiniz.
Pranav A.14

Bu soruyu sorduktan birkaç yıl sonra elektron icat edildi;) Ama elbette bugün haklısın.
janpio

Yanıtlar:


152

Artıları Salıncak:

  • Java kütüphanesinin bir parçası, ek yerel kütüphanelere gerek yok
  • tüm platformlarda aynı şekilde çalışır
  • Netbeans ve Eclipse'de Entegre GUI Editörü
  • / Oracle'dan iyi çevrimiçi öğreticiler
  • Resmi java uzantıları tarafından desteklenir (java OpenGL gibi)

Eksileri Salıncak:

  • Doğal görünüm ve his, gerçek yerel sistemden farklı davranabilir.
  • ağır bileşenler (doğal / awt) salıncak bileşenlerini gizler, ağır bileşenlerin kullanımı oldukça nadir olduğu için çoğu zaman sorun değildir

Artıları SWT:

  • mümkün olduğunda yerel öğeler kullanır, bu nedenle her zaman yerel davranış
  • tutulma tarafından desteklenen, gui editörü VEP (VEP ayrıca Swing ve AWT'yi de destekler)
  • çok sayıda çevrimiçi örnek
  • awt ve swing bileşenlerinin kullanımına izin veren entegre bir awt / swt köprüsü vardır

Eksileri SWT:

  • desteklenen her sistem için yerel kütüphaneler gerektirir
  • kullanılan yerel kaynaklar nedeniyle tüm sistemlerde her davranışı desteklemeyebilir (ipucu seçenekleri)
  • yerel bileşenler genellikle ana öğeleriyle birlikte atılırken, Yazı Tipleri gibi diğer kaynakların manuel olarak serbest bırakılması veya otomatik serbest bırakma için bir bileşene atma dinleyicisi olarak kaydedilmesi gerekir.

33
Salıncak "bir kere yaz, her yerde koş" a yakın olacak. SWT daha çok "bir kez yaz, her yerde ince ayar yap / test et" gibi olacak. Fakat aynı tartışma diğer dillerle de oldu.
Mark

12
Gerçekçi olarak, Swing'in "Native" görünümü ve hissi Gnome masaüstümden oldukça farklı davranıyor - bazı nedenlerden dolayı temalar oldukça iyi çalışıyor, menüler korkunç görünüyor ve neredeyse kullanılamıyor.
8

9
Eclipse 3.7'den başlayarak VEP'nin yerini WindowBuilder aldı (Swing ve SWT'yi de destekliyor).
Alexey Romanov

6
SWT'nin avantajı, yerel bileşenler nedeniyle daha az bellek tüketimi. Bu, sınırlı belleğe sahip makinelerde istenmelidir ve büyük GUI tasarımlarında salınım ve swt arasındaki bellek farklılıkları büyük olabilir.
jantobola

1
@JanTobola Bu çok yanlış. Yerel bileşenler, yalnızca Java yığınında değil, yerel yığın üzerinde ayrılan belleği kullanır. Netbeans Platformu, Eclipse RCP, SWT ve Swing kullanarak büyük GUI'ler üzerinde çalıştım. Java'nın çok erken sürümlerinde Swing'de bellek ayak izi ile ilgili bazı ciddi endişeler vardı (üçüncü taraf kütüphanesi olduğunda ve 1.1'den 1.2'ye kadar)? ) ancak artık doğru değil ve SWT'de çok sayıda kaynak yayınlamak geliştiricilere kalıyor, SWT ile çok daha fazla bellek sızıntısı var, ancak referans alınmayan bir bileşen Swing ile "bertaraf edilmek" ile sonuçlanıyor.
gouessej

63

Dikkate alınması gereken önemli bir nokta, bazı kullanıcıların ve bazı satıcıların (Dell) 64 bit Windows'larına 64 bit VM yükledikleri ve 32 bit ve 64 bit VM'lerde aynı SWT kütüphanesini kullanamayacağınızdır.

Bu, kullanıcıların 32 bit veya 64 bit Java VM'ye sahip olmasına bağlı olarak farklı paketleri dağıtmanız ve test etmeniz gerektiği anlamına gelir. Örneğin, Azureus ile bu sorunu görün , ancak bugün itibariyle ön indirme sayfasındaki yapıların 64 bit VM'de çalışmadığı Eclipse ile de karşılaşıyorsunuz.


2
İlginç bir nokta. Bir kullanıcı olarak bunun neden bu kadar önemli olduğunu merak ediyorum. Ama bu yüzden bunu düşünmem gerekecek. Teşekkürler.
Janpio

btw: javaws (webstart) 64 IMHO için mevcut değil
Karussell

1
@Karussell: 3/4/2011 itibarıyla Sun'ın Windows için 64 bit JVM'sinde JNLP desteği var. Sanırım bu bir süredir doğru, ama ne kadar sürdüğünden emin değilim.
Simyacı

23

pro salıncak:

  • Salıncak IMHO'nun en büyük avantajı, uygulamalarla kütüphaneleri göndermenize gerek kalmamasıdır (bu da bir düzine MB (!) Önler).
  • Doğal görünüm ve his salıncak için ilk yıllara göre çok daha iyi
  • performans swt ile karşılaştırılabilir (salınım yavaş değil!)
  • NetBeans, Matisse'i konforlu bir bileşen üreticisi olarak sunmaktadır.
  • Swing bileşenlerinin JavaFX'e entegrasyonu daha kolaydır.

Ama en alt satırda 'saf' salıncak veya swt ;-) kullanmanızı tavsiye etmem; salıncak / swt çıkışı için birkaç uygulama çerçevesi vardır. Buraya bak . En büyük oyuncular netbeans (swing) ve eclipse (swt). Bir başka güzel çerçeve grifon olabilir ve güzel bir 'bileşen seti' pivottur (salınım). Griffon çok ilginç çünkü birçok kütüphaneyi bütünleştiriyor ve sadece salınımı değil ; ayrıca pivot, swt, vb


1
Evet NetBeans, Matisse'i bir GUI oluşturucusu olarak var, ancak kod gerçekten ayrıntılı, okuması kafa karıştırıcı ve kaynak kodla düzenlemek imkansız. Gerçekten bir GUI oluşturucu tutulmaları ile gitmek istiyorsanız WindowBuilder
Pranav A.

13

Swing'i birkaç nedenden dolayı kullanırım.

  • Daha uzun süredir var ve daha fazla geliştirme çabası var. Bu nedenle, muhtemelen daha fazla özellik tamamlanmış ve (belki) daha az hata var.

  • Performanslı uygulamalar üretme konusunda birçok dokümantasyon ve başka rehberlik vardır.

  • Swing'deki değişiklikler tüm platformlara eşzamanlı olarak yayılırken, SWT'deki değişiklikler önce Windows'ta, sonra Linux'ta görünüyor.

Zengin özelliklere sahip bir uygulama oluşturmak istiyorsanız NetBeans RCP'ye (Zengin İstemci Platformu) göz atmak isteyebilirsiniz . Bir öğrenme eğrisi var, ancak güzel uygulamaları biraz pratik yaparak hızlı bir şekilde bir araya getirebilirsiniz. Eclipse platformunda geçerli bir karar vermek için yeterli tecrübem yok.

RCP'nin tamamını kullanmak istemiyorsanız, NetBeans ayrıca bağımsız olarak çıkarılabilen ve kullanılabilen birçok yararlı bileşene sahiptir.

Başka bir tavsiye sözcüğü, farklı düzen yöneticilerine bakın. Öğrenirken uzun bir süre beni taklit ettiler. En iyilerden bazıları standart kütüphanede bile değildir. MigLayout ve (Swing ve SWT her ikisi için) JGoodies Formlar araçları Bence iyi ikisidir.



8

İhtiyaçlarınız için, en alt satır Swing'i kullanmak gibi görünecektir, çünkü başlamak biraz daha kolaydır ve yerel platforma SWT kadar sıkı bir şekilde entegre edilmemiştir.

Salıncak genellikle güvenli bir bahistir.


6

İlginç soru. SWT hakkında bu kadar övünmek için çok iyi bilmiyorum (Swing ve AWT'den farklı olarak) ama burada SWT / Swing / AWT'de yapılan karşılaştırma.

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

Ve işte SWT'deki her şey hakkında öğretici alabileceğiniz site ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

Umarım doğru bir karar verirsiniz (kodlamada doğru kararlar varsa) ... :-)


4
Ancak makalenin 2003'ten olduğunu unutmayın ...
Alexey Romanov

4

Birkaç özellikten daha fazlasına sahip tam bir fonksiyonel uygulama geliştirmeyi planlıyorsanız, çerçeve olarak Eclipse RCP'yi kullanmaya atlamayı öneririm.

Başvurunuz çok fazla büyümezse veya gereksinimleriniz normal bir iş çerçevesi tarafından ele alınamayacak kadar benzersizse, Swing ile güvenle atlayabilirsiniz.

Günün sonunda, size en uygun olanı bulmak için her iki teknolojiyi de denemenizi öneririm. Netbeans vs Eclipse vs IntelliJ gibi, burada da kesin bir cevap yoktur ve her iki çerçevenin de kendine özgü dezavantajları vardır.

Profesyonel Salıncak:

  • daha fazla uzman
  • daha fazla Java benzeri (neredeyse kamusal alan yok, kaynağa atmaya gerek yok)

Profesyonel SWT:

  • daha fazla işletim sistemi yerli
  • Daha hızlı

10
Bence "daha hızlı" nokta son derece tartışmalı.
Russ Hayward

SWT kullanmak hantal, GUI'mi her Windows sürümü ile test etmek zorunda kaldım, bazı hatalar sadece Windows Vista altında çoğaltılabilirdi. Bazı yöntemler basitçe uygulanmamıştır veya kaputun altında AWT'yi çağırır, bu da SWT'yi kırma riski olmadan AWT ve Swing olmadan kompakt bir JRE kullanamayacağınız anlamına gelir. 2009 yılında SWT kullanmaya başladım ve benim düşünceme göre, bu daha hızlı değil. Dikkatle tasarlanmış bir kriter sunmanızı tavsiye ederim.
gouessej

4

Dikkate alınması gereken bir şey:

Bazı nedenlerden ötürü, bazı Swing bileşenleri bir ekran okuyucu (ve Windows için Java AccessBridge) kullanırken iyi çalışmaz. Farklı ekran okuyucuların farklı davranışlarla sonuçlandığını bilin. Deneyimlerime göre SWT Ağacı, ekran okuyucuyla birlikte Salıncak Ağacından çok daha iyi performans gösteriyor. Böylece uygulamamız hem SWT hem de Swing bileşenlerini kullanmıştır.

Uygun SWT kütüphanesini dağıtmak ve yüklemek için bu bağlantıyı yararlı bulabilirsiniz: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191


3

SWT, yüzyılın başlarında Swing'in durgunluğuna bir yanıt olarak yaratıldı. Performans farkları ihmal edilebilir hale geldiğine göre Swing'in standart uygulamalarınız için daha iyi bir seçenek olduğunu düşünüyorum. SWT / Eclipse, birçok kazan plakası koduna yardımcı olan güzel bir çerçeveye sahiptir.

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.