Applicazione desktop Java: SWT vs. Swing [chiuso]


158

Sono uno sviluppatore web di giorno e sto pensando di creare la mia prima vera applicazione desktop. L'idea è quella di creare uno strumento che automatizza un'attività molto ripetitiva in un'applicazione Web in cui non è disponibile alcuna API.

So che voglio usare Java. L'ho usato prima per roba web, conosco abbastanza bene la sintassi e voglio che l'applicazione sia cross-plateau il più semplice possibile.

Dove non sono così sicuro è se dovrei usare SWT o Swing. Dato che il mio pubblico principale utilizza Windows, voglio vederlo il più nativo possibile lì. Linux e Mac dovrebbero funzionare, ma l'aspetto non è così importante qui.

Quindi quali sono gli argomenti a favore e contro ogni UI Framework, Swing o SWT?

Grazie.

PS: sviluppo su Windows usando Eclipse. Ma stavo pensando di giocare con Netbeans.


Domanda difficile. :-) Vorrei andare con Swing. Ma, non hai PRO o CON per quella decisione.
Pablo Santa Cruz,

duplicato Q. si prega di cercare Swing vs. SWT Q chiesto già su SO. FWIW, uso Swing solo perché ho imparato in quel modo. Ci sono librerie native look-and-feel (vedi jgoodies look)
Jason S,

"costruisci uno strumento che automatizza un'attività molto ripetitiva in un'applicazione web" - qualche informazione al riguardo? Potrebbe esserci uno strumento esistente - e metto in dubbio la necessità che un'app desktop lo automatizzi - potrebbe funzionare nel tuo caso in questo momento - ma cosa succede se passi a una soluzione ospitata?
Nate,

Non è necessario apprendere un framework GUI per un'app desktop. Se puoi usare html css e js (che presumo tu sia) puoi usare Electron per creare app native con i linguaggi web.
Pranav A.

Electron è stato inventato alcuni anni dopo che ho posto questa domanda;) Ma ovviamente oggi hai ragione.
Janpio,

Risposte:


152

Pro swing:

  • parte della libreria java, non sono necessarie ulteriori librerie native
  • funziona allo stesso modo su tutte le piattaforme
  • Editor GUI integrato in Netbeans ed Eclipse
  • buoni tutorial online di Sun / Oracle
  • Supportato da estensioni java ufficiali (come java OpenGL)

Contro Swing:

  • L'aspetto e la sensazione nativi possono comportarsi in modo diverso dal vero sistema nativo.
  • i componenti pesanti (nativi / awt) nascondono i componenti dello swing, non un problema per la maggior parte del tempo poiché l'uso di componenti pesanti è piuttosto raro

Pro SWT:

  • usa elementi nativi quando possibile, quindi sempre comportamento nativo
  • supportato da eclipse, editor di gui VEP (VEP supporta anche Swing e AWT)
  • gran numero di esempi online
  • ha un ponte awt / swt integrato per consentire l'uso di componenti awt e swing

Contro SWT:

  • richiede librerie native per ciascun sistema supportato
  • potrebbe non supportare tutti i comportamenti su tutti i sistemi a causa delle risorse native utilizzate (opzioni di suggerimento)
  • gestione delle risorse native, mentre i componenti nativi saranno spesso eliminati con il loro genitore, altre risorse come Font devono essere rilasciate o registrate manualmente come smaltimento listener in un componente per il rilascio automatico.

33
Swing sarà più vicino a "scrivere una volta, correre ovunque". SWT sarà più come "scrivere una volta, modificare / testare ovunque". Ma questa stessa discussione è avvenuta anche con altre lingue.
Segna il

12
Realisticamente, l'aspetto "nativo" di Swing si comporta in modo considerevolmente diverso dal mio desktop Gnome - mentre, per qualche ragione, i temi funzionano abbastanza bene, i menu sembrano orribili e quasi inutilizzabili.
Capanna

9
A partire da Eclipse 3.7, VEP è stato sostituito da WindowBuilder (che supporta anche Swing e SWT).
Alexey Romanov,

6
Il vantaggio di SWT è anche un minore consumo di memoria a causa dei componenti nativi. Ciò dovrebbe essere desiderabile su macchine con memoria limitata e le differenze di memoria tra swing e swt possono essere grandi nei grandi progetti di interfaccia grafica.
Jantobola,

1
@JanTobola È assolutamente sbagliato. I componenti nativi utilizzano la memoria allocata sull'heap nativo, non solo sull'heap Java. Ho lavorato su grandi GUI usando Netbeans Platform, Eclipse RCP, SWT e Swing. C'erano alcune serie preoccupazioni sull'impronta della memoria in Swing nelle primissime versioni di Java (quando era una libreria di terze parti e dopo anche dalla 1.1 alla 1.2? ) ma non è più vero e spetta agli sviluppatori rilasciare molte risorse in SWT, ci sono molte più opportunità di perdita di memoria con SWT mentre un componente senza riferimento finisce per essere "eliminato" con Swing.
Gouessej,

63

Una cosa importante da considerare è che alcuni utenti e alcuni rivenditori (Dell) installano una VM a 64 bit su Windows a 64 bit e non è possibile utilizzare la stessa libreria SWT su VM a 32 e 64 bit.

Ciò significa che sarà necessario distribuire e testare diversi pacchetti a seconda che gli utenti dispongano di una VM Java a 32 o 64 bit. Vedi questo problema con Azureus, ad esempio, ma lo hai anche con Eclipse, dove ad oggi i build nella pagina di download anteriore non vengono eseguiti su una VM a 64 bit.


2
Punto interessante Come utente sono ancora sconcertato perché questo è un grosso problema. Ma bene, è così che dovrò considerare questo. Grazie.
Janpio

btw: javaws (webstart) non è disponibile per 64 IMHO
Karussell il

1
@Karussell: dal 3/4/2011, la JVM a 64 bit di Sun per Windows ha il supporto JNLP. Penso che sia vero da un po ', ma non sono sicuro di quanto tempo.
The Alchemist

23

pro swing:

  • Il più grande vantaggio di swing IMHO è che non è necessario spedire le librerie con la tua applicazione (che evita dozzine di MB (!)).
  • L'aspetto nativo è molto meglio per lo swing rispetto ai primi anni
  • le prestazioni sono paragonabili a swt (lo swing non è lento!)
  • NetBeans offre Matisse come costruttore di componenti confortevole.
  • L'integrazione dei componenti Swing in JavaFX è più semplice.

Ma alla fine non suggerirei di usare swing o swt 'puro' ;-) Esistono diversi framework applicativi per swing / swt out. Guardate qui . I più grandi giocatori sono netbeans (swing) ed eclipse (swt). Un altro bel quadro potrebbe essere il grifone e un bel "set di componenti" è il perno (swing). Griffon è molto interessante perché integra molte librerie e non solo swing ; anche pivot, swt, ecc


1
Sì, NetBeans ha Matisse come generatore di GUI, ma il codice è davvero dettagliato, confuso da leggere e quasi impossibile da modificare con il codice sorgente. Se vuoi davvero un costruttore di GUI vai con le eclissi WindowBuilder
Pranav A.

13

Vorrei usare Swing per un paio di motivi.

  • È in circolazione da più tempo e ha subito maggiori sforzi di sviluppo. Quindi è probabilmente più completo e (forse) ha meno bug.

  • C'è molta documentazione e altre indicazioni sulla produzione di applicazioni performanti.

  • Sembra che le modifiche a Swing si propaghino su tutte le piattaforme contemporaneamente mentre le modifiche a SWT sembrano apparire prima su Windows, poi su Linux.

Se si desidera creare un'applicazione molto ricca di funzionalità, è possibile verificare il RCP NetBeans (piattaforma Rich Client). C'è una curva di apprendimento, ma puoi mettere insieme belle applicazioni rapidamente con un po 'di pratica. Non ho abbastanza esperienza con la piattaforma Eclipse per esprimere un giudizio valido.

Se non si desidera utilizzare l'intero RCP, NetBeans ha anche molti componenti utili che possono essere estratti e utilizzati in modo indipendente.

Un'altra parola di consiglio, esaminare diversi gestori di layout. Mi hanno inciampato a lungo quando stavo imparando. Alcuni dei migliori non sono nemmeno nella libreria standard. Gli strumenti MigLayout (sia per Swing che SWT) e JGoodies Forms sono due dei migliori secondo me.



8

Per le tue esigenze sembra che la linea di fondo sarà usare Swing poiché è leggermente più facile iniziare e non è strettamente integrato con la piattaforma nativa come SWT.

Swing di solito è una scommessa sicura.


6

Domanda interessante. Non conosco SWT troppo bene per vantarsene (a differenza di Swing e AWT) ma ecco il confronto fatto su 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

Ed ecco il sito in cui puoi ottenere tutorial su praticamente qualsiasi cosa su SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm )

Spero che tu prenda la decisione giusta (se ci sono decisioni giuste nella codifica) ... :-)


4
Ma nota che l'articolo è del 2003 ...
Alexey Romanov,

4

Se hai intenzione di creare applicazioni completamente funzionali con più di una manciata di funzionalità, ti suggerirò di passare subito all'utilizzo di Eclipse RCP come framework.

Se la tua applicazione non diventerà troppo grande o i tuoi requisiti sono troppo unici per essere gestiti da un normale framework aziendale, puoi saltare in sicurezza con Swing.

Alla fine, ti suggerirei di provare entrambe le tecnologie per trovare quella più adatta a te. Come Netbeans vs Eclipse vs IntelliJ, non esiste una risposta assolutamente corretta qui ed entrambi i framework hanno i loro svantaggi.

Pro Swing:

  • più esperti
  • più simile a Java (quasi nessun campo pubblico, non è necessario disporre di risorse)

Pro SWT:

  • più SO nativo
  • Più veloce

10
Penso che il punto "più veloce" sia altamente controverso.
Russ Hayward,

SWT è ingombrante da usare, ho dovuto testare la mia GUI con ogni versione di Windows, alcuni bug erano riproducibili solo con Windows Vista. Alcuni metodi sono semplicemente non implementati o chiamano AWT sotto il cofano, il che significa che non è possibile utilizzare un JRE compatto senza AWT e Swing senza rischiare di interrompere SWT. Ho iniziato a utilizzare SWT nel 2009 e, a mio modesto parere, non è più veloce. Ti consiglio di fornire un benchmark attentamente progettato.
gouessej,

4

Una cosa da considerare: Screenreaders

Per alcuni motivi, alcuni componenti Swing non funzionano bene quando si utilizza uno screen reader (e Java AccessBridge per Windows). Sappi che diversi screen reader hanno un comportamento diverso. E nella mia esperienza SWT-Tree si comporta molto meglio di Swing-Tree in combinazione con uno screen reader. Pertanto, la nostra applicazione ha finito per utilizzare sia i componenti SWT che Swing.

Per distribuire e caricare la libreria SWT appropriata, è possibile trovare questo collegamento utile: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191


3

SWT è stato creato come risposta alla lentezza di Swing verso la fine del secolo. Ora che le differenze di prestazioni stanno diventando trascurabili, penso che Swing sia un'opzione migliore per le tue applicazioni standard. SWT / Eclipse ha un bel framework che aiuta molto con il codice della piastra della caldaia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.