Приложение Java для настольных ПК: SWT vs. Swing [закрыто]

158

Я веб-разработчик в день и думаю о создании моего первого реального настольного приложения. Идея состоит в том, чтобы создать инструмент, который автоматизирует очень повторяющуюся задачу в веб-приложении, где нет API.

Я знаю, что хочу использовать Java. Я использовал его раньше для веб-приложений, хорошо знаю синтаксис и хочу, чтобы приложение было кроссплатформенным как можно проще.

Я не уверен, стоит ли мне использовать SWT или Swing. Поскольку моя основная аудитория использует Windows, я хочу, чтобы она выглядела как можно более родной. Linux и Mac должны работать, но внешний вид здесь не так важен.

Итак, каковы аргументы за и против каждого UI Framework, Swing или SWT?

Спасибо.

PS: я разрабатываю на Windows, используя Eclipse. Но думал об игре с Netbeans.

janpio
источник
Сложный вопрос. :-) Я бы пошел с Swing. Но для этого решения не имейте плюсов или минусов.
Пабло Санта Круз
дубликат Q. пожалуйста, ищите Swing против SWT Q, которые уже задавались на SO. FWIW, я использую Swing только потому, что я научился этому. Есть нативные библиотеки внешнего вида (смотрите jgoodies look)
Jason S
«Создать инструмент, который автоматизирует очень повторяющиеся задачи в веб-приложении» - есть информация по этому поводу? Может существовать существующий инструмент - и я сомневаюсь в необходимости настольного приложения для автоматизации этого - он может работать в вашем случае прямо сейчас - но что если вы перейдете к размещенному решению?
Nate
Вам не нужно изучать графический интерфейс для настольного приложения. Если вы можете использовать html css и js (как я полагаю, вы), вы можете использовать Electron для создания нативно выглядящих приложений с веб-языками.
Пранав А.
Электрон был изобретен через несколько лет после того, как я задал этот вопрос;) Но, конечно, сегодня вы правы.
Январь

Ответы:

152

Плюсы Swing:

  • часть библиотеки Java, нет необходимости в дополнительных собственных библиотеках
  • работает одинаково на всех платформах
  • Интегрированный редактор GUI в Netbeans и Eclipse
  • хорошие онлайн-уроки от Sun / Oracle
  • Поддерживается официальными расширениями Java (например, OpenGL Java)

Минусы Свинга:

  • Родной внешний вид и поведение могут отличаться от реальной родной системы.
  • тяжелые компоненты (native / awt) скрывают качающиеся компоненты, в большинстве случаев это не проблема, так как использование тяжелых компонентов довольно редко

Плюсы SWT:

  • по возможности использует нативные элементы, поэтому всегда нативное поведение
  • поддерживается eclipse, графический редактор VEP (VEP также поддерживает Swing и AWT)
  • большое количество примеров онлайн
  • имеет встроенный мост AWT / SWT, позволяющий использовать компоненты AWT и Swing

Минусы СВТ:

  • требуются собственные библиотеки для каждой поддерживаемой системы
  • может не поддерживать каждое поведение на всех системах из-за используемых собственных ресурсов (варианты подсказок)
  • управление собственными ресурсами, в то время как собственные компоненты часто располагаются вместе с их родительскими ресурсами, например, шрифты должны быть вручную освобождены или зарегистрированы как слушатель утилизации компонента для автоматического выпуска.
josefx
источник
33
Свинг будет ближе к «напиши один раз, беги куда угодно». SWT будет больше похож на «напиши один раз, твик / тест везде». Но такая же дискуссия произошла и с другими языками.
Mark
12
Реально внешний вид Swing в «родном» стиле значительно отличается от моего рабочего стола Gnome - хотя по какой-то причине темы работают довольно хорошо, меню выглядят ужасно и практически непригодны для использования.
Hut8
9
Начиная с Eclipse 3.7, VEP был заменен WindowBuilder (который также поддерживает Swing и SWT).
Алексей Романов
6
Преимущество SWT также заключается в меньшем потреблении памяти из-за собственных компонентов. Это должно быть желательно на машинах с ограниченной памятью, и различия в размерах между Swing и SWT могут быть большими в больших графических интерфейсах.
Янтобола
1
@JanTobola Это совершенно неправильно. Собственные компоненты используют память, выделенную в собственной куче, а не только в куче Java. Я работал над большими графическими интерфейсами, используя Netbeans Platform, Eclipse RCP, SWT и Swing. Существовали серьезные опасения по поводу использования памяти в Swing в очень ранних версиях Java (когда это была сторонняя библиотека, а также после версии от 1.1 до 1.2? ), но это уже не так, и разработчики должны выпустить много ресурсов в SWT, гораздо больше возможностей утечки памяти с SWT, тогда как компонент без ссылок заканчивается тем, что «удаляется» с Swing.
gouessej
63

Важно учитывать, что некоторые пользователи и некоторые реселлеры (Dell) устанавливают 64-битную виртуальную машину на свои 64-битные Windows, и вы не можете использовать одну и ту же библиотеку SWT на 32-битных и 64-битных виртуальных машинах.

Это означает, что вам нужно будет распространять и тестировать разные пакеты в зависимости от того, есть ли у пользователя 32-битная или 64-битная Java VM. Посмотрите эту проблему , например, на Azureus, но она есть и в Eclipse, где на сегодняшний день сборки на передней странице загрузки не работают на 64-битной виртуальной машине.

Людовико Фишер
источник
2
Интересный момент. Как пользователь, я все еще поражен, почему это так важно. Но хорошо, так что мне придется рассмотреть это. Спасибо.
Январь
кстати: javaws (webstart) не доступен для 64 ИМХО
Karussell
1
@Karussell: Начиная с 04.03.2011, 64-битная JVM от Sun для Windows имеет поддержку JNLP. Я думаю, что это было правдой некоторое время, но я не уверен, как долго.
Алхимик
23

про свинг:

  • Самое большое преимущество Swing IMHO в том, что вам не нужно поставлять библиотеки вместе с вашим приложением (что позволяет избежать десятков МБ (!)).
  • Родной внешний вид намного лучше для качелей, чем в первые годы
  • производительность сопоставима с SWT (качели не медленные!)
  • NetBeans предлагает Matisse в качестве удобного компонента сборки.
  • Интеграция компонентов Swing в JavaFX проще.

Но в итоге я бы не предложил использовать «чистый» свинг или свт ;-) Существует несколько каркасов приложений для свинг / свт аут. Посмотрите здесь . Крупнейшие игроки - NetBeans (свинг) и Eclipse (SWT). Другим хорошим фреймворком может быть griffon, а хорошим «набором компонентов» является pivot (swing). Griffon очень интересен, потому что он объединяет множество библиотек и не только свинг ; также Pivot, SWT и т. д.

Karussell
источник
1
Да, NetBeans использует Matisse в качестве разработчика GUI, но код действительно многословен, запутан для чтения и практически невозможен для редактирования с помощью исходного кода. Если вы действительно хотите, чтобы GUI-конструктор шел с затмениями WindowBuilder
Pranav A.
13

Я бы использовал Swing по нескольким причинам.

  • Это было дольше и было приложено больше усилий для развития. Следовательно, он, вероятно, более полнофункциональный и (возможно) имеет меньше ошибок.

  • Существует много документации и других руководств по созданию эффективных приложений.

  • Похоже, что изменения в Swing распространяются на все платформы одновременно, в то время как изменения в SWT появляются сначала в Windows, а затем в Linux.

Если вы хотите создать очень многофункциональное приложение, вы можете проверить RCP NetBeans (Rich Client Platform). Есть кривая обучения, но вы можете быстро собрать хорошие приложения с небольшой практикой. У меня недостаточно опыта работы с платформой Eclipse, чтобы принять верное решение.

Если вы не хотите использовать весь RCP, в NetBeans также есть много полезных компонентов, которые можно извлечь и использовать независимо.

Еще один совет, посмотрите на разных менеджеров по расположению. Они долго меня сбивали с толку, когда я учился. Некоторые из лучших отсутствуют даже в стандартной библиотеке. Инструменты MigLayout (для Swing и SWT) и JGoodies Forms, на мой взгляд, являются двумя лучшими.

clartaq
источник
10

Я бы выбрал свинг только потому, что он «родной» для Java.

Кроме того, посмотрите на http://swingx.java.net/ .

обнуляется
источник
1
Ссылка не работает!
Сократ
8

Для ваших требований звучит так, что суть в том, чтобы использовать Swing, так как с ним немного легче начать работу, и он не так тесно интегрирован с собственной платформой, как SWT.

Свинг обычно является безопасной ставкой.

Ювал Адам
источник
6

Интересный вопрос. Я не знаю SWT слишком хорошо, чтобы хвастаться этим (в отличие от Swing и AWT), но вот сравнение, сделанное на 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

А вот сайт, на котором вы можете получить учебное пособие по любому предмету на SWT ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm ).

Надеюсь, вы примете правильное решение (если есть верные решения в кодировании) ... :-)

Бухаке синди
источник
4
Но обратите внимание, что статья
Алексей Романов
4

Если вы планируете создавать полнофункциональные приложения с более чем несколькими функциями, я предлагаю перейти к использованию Eclipse RCP в качестве платформы.

Если ваше приложение не станет слишком большим или ваши требования слишком уникальны для нормальной бизнес-среды, вы можете спокойно перейти на Swing.

В конце дня я бы предложил вам попробовать обе технологии, чтобы найти ту, которая подходит вам лучше. Как и Netbeans против Eclipse против IntelliJ, здесь нет абсолютно правильного ответа, и обе платформы имеют свои недостатки.

Pro Swing:

  • больше экспертов
  • более Java-подобный (почти нет открытых полей, нет необходимости размещать ресурсы)

Pro SWT:

  • более родной ОС
  • Быстрее
нанда
источник
10
Я думаю, что «более быстрый» вопрос очень спорный.
Расс Хейворд
SWT неудобен в использовании, мне приходилось тестировать свой графический интерфейс с каждой версией Windows, некоторые ошибки можно было воспроизвести только в Windows Vista. Некоторые методы просто не реализованы или вызывают AWT под капотом, что означает, что вы не можете использовать компактную JRE без AWT и Swing, не рискуя нарушить SWT. Я начал использовать SWT в 2009 году и, по моему скромному мнению, он не быстрее. Я советую вам предоставить тщательно разработанный ориентир.
gouessej
4

Одна вещь, чтобы рассмотреть: Screenreaders

По некоторым причинам некоторые компоненты Swing не работают должным образом при использовании программы чтения с экрана (и Java AccessBridge для Windows). Знайте, что разные программы чтения с экрана приводят к разному поведению. И по моему опыту, SWT-дерево работает намного лучше, чем Swing-Tree в сочетании с программой чтения с экрана. Таким образом, наше приложение использовало компоненты SWT и Swing.

Для распространения и загрузки надлежащей SWT-библиотеки вы можете найти эту ссылку полезной: http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191

incomudro
источник
3

SWT был создан как ответ на медлительность Свинга на рубеже веков. Теперь, когда различия в производительности становятся незначительными, я думаю, что Swing - лучший вариант для ваших стандартных приложений. У SWT / Eclipse есть хорошая структура, которая помогает с большим количеством кода котельной плиты.

Оливер Уоткинс
источник