Как выбрать между использованием Swing GUI или легкого веб-клиента для пользовательского интерфейса моего приложения Java?

У меня всегда есть эта внутренняя борьба, когда дело доходит до пользовательского интерфейса. Я создаю "движок" приложения и, как правило, откладываю пользовательский интерфейс после того, как мои алгоритмы работают. Затем я хожу взад и вперед, пытаясь решить, как позволить пользователю взаимодействовать с моей программой. Лично я поклонник командной строки, но я не могу ожидать этого от моих пользователей в целом.

Мне очень нравится то, что возможно в браузере в эпоху web 2.0 и ajax. С другой стороны, это не так трудно сделать Swing front-end, и вы можете рассчитывать на более последовательную презентацию для пользователя (хотя использование хорошей JavaScript-платформы, такой как YUI или jQuery, проходит долгий путь к нормализации браузеров).

очевидно, что оба подхода имеют свои достоинства и недостатки. Итак, какие критерии / параметры / ситуации должны привести меня к использованию легкого (например, веб -) GUI? Какие критерии / параметры / ситуации должны привести меня к использованию более тяжелого (например, Swing-based) GUI?

Я не намерен начинать войну пламени, просто интересуюсь конструктивными / объективными мнениями сообщества.

правка #1 В свете первых нескольких ответов я хотел бы пояснить, что я хотел бы развернуть свое приложение независимо, а не обязательно размещать его на каком-либо интернет-сервере. Поэтому мне пришлось бы развертывать с облегченной инфраструктурой веб-сервера a la Jetty/Tomcat или аналогичный.

8 ответов


Это зависит от приложения, и это, по сути, вопрос юзабилити (хотя есть такие соображения, как хранение данных и требования к платформе). Подумайте о плюсах и минусах.

плюсы легкого веб-интерфейса:

  • легкость распространения
  • независимая платформа
  • простота обслуживания

минусы легкого веб-интерфейса:

  • меньше экологический контроль
  • стандарты разметки различаются между браузерами
  • требуется веб-сервер и все что с ней связано

плюсы исполняемого пользовательского интерфейса

  • больше экологического контроля (т. е.: полноэкранные приложения и т. д.)
  • Не обязательно подвержены задержкам и отключениям

минусы исполняемого пользовательского интерфейса

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

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

также веб-приложение позволит вам точно отслеживать использование вашего приложения (через Google analytics или что-то подобное). Не уверен, что это беспокоит, но это может быть полезно для вас в будущем.


Если это клиент-серверное приложение, я обычно перейти на веб-интерфейс для приложения.

вы избавите себя от бесчисленных проблем с такими вещами, как установленные версии JRE, распространение обновлений, разрешений приложений, исчезнувших ярлыков...


вам нужно сломать требования приложения, чтобы решить это...

  1. у пользователей установлена Java достаточной версии? Это должно быть, чтобы запустить Swing GUI.
  2. у вас есть веб-сервер?
  3. вам нужна гибкость GUI качания или доступность веб-интерфейса?
  4. является Java Webstart и option, если это так, вы можете распространять Swing GUI через интернет.
  5. выполняет ли ваше приложение обширные расчеты или обработка? Если это так, клиентское приложение может быть ответом.

есть миллион таких вопросов. Я бы предложил сеанс мозгового штурма и отслеживать все плюсы и минусы каждого, добавляя балл, чем выбрасывать все это и идти с вашим чувством кишки:)


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

только две вещи с моей головы.


подумайте о пользователях и вариантах использования вашего проекта.

ожидают ли пользователи доступа к нему, когда они отключены от интернета (например, в самолете или в кафе без доступа в интернет)? Используйте Swing.

вы хотите, чтобы пользователи могли получить доступ к одному и тому же инструменту с разных компьютеров (например, как на работе, так и дома)? Используйте веб-интерфейс.

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


сделайте быструю догадку, я часто пытаюсь спросить себя / клиентов, имеет ли приложение высокий спрос на "запись". Для приложения, доступного только для чтения, идеально подходит решение для тонкого клиента. Но если требуется много действий записи, то настольное приложение swing обладает большей гибкостью.

лично я всегда Превер настольное приложение swing. Он может легко развертываться с помощью Java Webstart.


Не зная ничего о вашем приложении я не могу дать наилучшие рекомендации. Однако я могу заявить из личного / профессионального опыта, что установка приложения на клиентских машинах-это намного больше боли в заднице, чем кажется.

с AJAX / web вам действительно нужно беспокоиться только о поддержке, как три браузера. При развертывании продукта на веб-сервере ошибки/обновления установки ощущаются только один раз.

с подставкой вместе Swing app, вы получите дело с действительно очень большой беспорядок, который устанавливает приложение на неизвестных системах. Этот беспорядок был настолько плох, что такие вещи, как AJAX, действительно подталкивались, чтобы веб-приложения вели себя/чувствовали себя настоящим родным приложением.