Java на всех платформах - PullRequest
       15

Java на всех платформах

2 голосов
/ 13 января 2010

Если вы хотите закодировать настольное приложение на java для windows, mac и linux, будет ли код одинаковым для всех?

а вы просто меняете графический интерфейс, чтобы приложение Windows было более похожим на Windows и т. Д.

как это работает, не вдаваясь в детали?

Ответы [ 9 ]

5 голосов
/ 13 января 2010

Одна из привлекательных сторон Java - «Пиши один раз, беги куда угодно» (в значительной степени).

Скомпилированный байт-код выполняется виртуальной машиной Java (JVM). JVM специфична для платформы, на которой она работает, но тот же байт-код может выполняться любой платформой, на которой установлена ​​JVM. Код не нужно перекомпилировать.

Swing - это кроссплатформенный инструментарий Java для GUI. Вы можете настроить его так, чтобы он имел графический интерфейс, который выглядит одинаково на разных платформах (он не будет выглядеть ни на одной из них), или вы можете сказать ему использовать наиболее подходящий внешний вид для платформы, которую он выполняется на. Поэтому, если вы работаете в Windows, оно будет выглядеть как приложение Windows, если вы работаете в OS X, оно будет выглядеть как собственное приложение Mac.

3 голосов
/ 13 января 2010

Вы используете универсальные библиотеки пользовательского интерфейса, которые отображают один и тот же пользовательский интерфейс на разных платформах.

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

Simple.

Примеры: Swing , AWT (с ошибками, читайте ниже) и QT (с предупреждениями) или SWT (людям это нравится )

2 голосов
/ 13 января 2010

Сам код будет работать на любой платформе с виртуальной машиной Java, потому что все JVM преобразуют один и тот же точный байт-код в машинный код, специфичный для ОС.

Что касается внешнего вида, существует метод (UIManager.getSystemLookAndFeelClassName()), который позволяет заставить ваш интерфейс использовать графический интерфейс, соответствующий остальной части ОС. Он возвращает разные результаты на разных ОС.

2 голосов
/ 13 января 2010

Мало того, что код будет таким же, но и результат скомпилированный будет таким же (вывод javac, компилятор java), по крайней мере теоретически. JVM, установленная в каждой операционной системе, обеспечивает преобразование скомпилированного вывода (называемого «байт-кодом») в специфичный для платформы код. Это означает, что по большей части вы можете, например, спроектируйте и создайте приложение Java на Linux и запустите его на Windows или Mac.

1 голос
/ 13 января 2010

В целом, да, Java обычно пишут один раз, когда он запускается где угодно. Это "скины", чтобы соответствовать платформе. Вы должны обращать внимание на информацию об оборудовании, например размер экрана, если ожидаете, что он будет работать на телефоне.

Обратите внимание, что он также будет работать на кабельных коробках - я работаю над некоторыми из этих вещей.

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

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

1 голос
/ 13 января 2010

Если вы разбиваете свое приложение на три разных слоя:

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

Тогда вы можете использовать один и тот же код для всех трех на разных платформах, но он будет «чувствовать» только на одной из них. Обычно логика и представление не изменяются, но взаимодействие должно измениться, если приложение Java должно имитировать нативные приложения.

Например, по умолчанию в OS X это меню вверху экрана, а по умолчанию в Windows и Gnome - меню вверху окна. Gnome обычно редактирует свойства приложения, Windows под Windows и OS X под символом яблока (или чем-то еще), поэтому детали меню не должны быть одинаковыми. Каждая система имеет разные правила компоновки и шрифтов, только некоторые из которых реализованы в Swing, имитируя внешний вид.

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

1 голос
/ 13 января 2010

Люди говорили, что Swing не дает нативных результатов на разных платформах. Видимо, все изменилось, и теперь Swing почти идеален. Иди качай! Это отличная новость для тех из нас, кто любит Java (и Groovy! И JRuby!). Это может быть преждевременно , но это в работе.

Java будет работать и хорошо, и вы сможете один раз написать и скомпилировать для ВМ. Однако вам нужно будет по-разному упаковать свое приложение для каждой платформы, если вы не хотите, чтобы пользователь вводил java -jar app.jar. В OSX вам нужно создать .app (очень просто), и есть много вариантов запуска для Windows и Linux. Также Java WebStart - еще одна возможность.

Надеюсь, это поможет.

Редактировать: Чтобы ваш Swing работал на OSX и выглядел как "родной", требуется несколько дополнительных шагов Смотри здесь .

1 голос
/ 13 января 2010

Если вы хотите, чтобы пользовательский интерфейс вашего приложения был «похож на Windows» в Windows, «похож на Mac» на Mac и т. Д., Взгляните на технологию SWT и RCP, лежащую в основе Eclipse. В частности, SWT имеет свойства, которые вы хотите.

Недостатком (если вы хотите так назвать) является то, что ваше приложение не сможет повторно использовать любые существующие библиотеки на основе AWT / Swing. И, очевидно, вы должны научиться использовать стек SWT.

0 голосов
/ 11 мая 2010

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

Красота Java в том, что 90% времени вам даже не нужно думать об этом. Вы просто пишете код, который будет работать на платформе, на которой вы разрабатываете, и он будет волшебным образом переноситься.

Единственное, что обычно является проблемой для меня, - это работа с файлами. В Java есть некоторые функции, которые помогают, но иногда вам нужно изо всех сил использовать их. Например, имена файлов различны: в Windows у вас есть спецификатор диска (например, «C:»), а в Linux - нет, а в Windows вы разделяете имена каталогов с помощью обратной косой черты, а в Linux вы разделяете их с помощью прямой косой черты. Существуют функции, позволяющие вам справиться с этим с помощью общего кода, но бывают случаи, когда это является проблемой. И т.д.

Если вы хотите использовать определенные шрифты, вы не найдете одинаковые шрифты на разных платформах. Но вы не можете полагаться на поиск конкретных шрифтов на разных компьютерах с одной и той же ОС. Если вы хотите использовать определенные шрифты, вам действительно нужно проверить, какие шрифты доступны на коробке, и позволить пользователю выбрать тот, который он хочет, или попросить программу проверить характеристики шрифта, чтобы выбрать один.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...