40. Цели и история создания технологии и языка Java. Сопоставление технологии Java и .Net. Сопоставление особенностей языков программирования Java и С++. Существующие редакции и версии Java.

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

 

Рождению языка Java предшествовала довольно интересная история. В 1990 году разработчик ПО компании Sun Microsystems Патрик Нотон (Patrick Naughton) понял, что ему надоело поддерживать сотни различных интерфейсов программ, используемых в компании, и сообщил исполнительному директору Sun Microsystems и своему другу Скотту МакНили (Scott McNealy) о своем намерении перейти работать в компанию NeXT. МакНили, в свою очередь, попросил Нотона составить список причин своего недовольства и выдвинуть такое решение проблем, как если бы он был Богом и мог исполнить все, что угодно.

 

Нотон, хотя и не рассчитывал на то, что кто-то обратит внимание на его письмо, все же изложил свои претензии, беспощадно раскритиковав недостатки Sun Microsystems, в частности, разрабатываемую в тот момент архитектуру ПО NeWS. К удивлению Нотона, его письмо возымело успех: оно было разослано всем ведущим инженерам Sun Microsystems, которые не замедлили откликнуться и высказать горячую поддержку своему коллеге и одобрение его взглядов на ситуацию в Sun Microsystems. Обращение вызвало одобрение и у высшего руководства компании, а именно, у Билла Джоя (Bill Joy), основателя Sun Microsystems, и Джеймса Гослинга (James Gosling), начальника Нотона.

 

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

 

Команда из шести человек, с кодовым названием Green, ушла в самовольное изгнание, погрузившись в исследования бытовых устройств, таких как Nintendo Game Boys, устройств дистанционного управления. Команда Green пыталась найти средство, с помощью которого можно было бы установить взаимодействие между этими устройствами. Вскоре стало ясно, что такие электроприборы, как видеомагнитофоны, проигрыватели лазерных дисков, стереосистемы - все они были реализованы на разных процессорах. Это означало, что если производитель захочет добавить телевизору или видеомагнитофону дополнительные функции или характеристики, он будет зажат в рамках средств, зашитых в аппаратное обеспечение. Эта проблема, в сочетании с ограниченностью памяти микросхем этих устройств, выдвинула новый подход к программированию ПО, который должен был стать ведущим на рынке бытовой электроники.

 

Команда приступила к разработке нового объектно-ориентированного языка программирования, который был назван Oak (дуб), в честь дерева, росшего под окном Гослинга.

 

Вскоре компания Sun Microsystems преобразовала команду Green в компанию First Person. Новая компания обладала интереснейшей концепцией, но не могла найти ей подходящего применения. После ряда неудач неожиданно ситуация для компании резко изменилась: был анонсирован Mosaic - так родился World Wide Web, с которого началось бурное развитие Internet.

 

Нотон предложил использовать Oak в создании Internet- приложений. Так Oak стал самостоятельным продуктом, вскоре был написан Oak-компилятор и Oak-браузер "WebRunner". В 1995 году компания Sun Microsystems приняла решение объявить о новом продукте, переименовав его в Java (единственное разумное объяснение названию - любовь программистов к кофе). Когда Java оказалась в руках Internet, стало необходимым запускать Java-аплеты - небольшие программы, загружаемые через Internet. WebRunner был переименован в HotJava и компания Netscape встала на поддержку Java-продуктов.

Многолетнее противостояние таких ярких лидеров мировой ИТ-индустрии, как корпорации Sun и Microsoft, постоянно подкрепляемое бесконечными судебными тяжбами, стало уже притчей во языцех. Непримиримая борьба между ними идет по всему фронту: в нее включились операционные системы семейств UNIX и Windows, пакеты офисных приложений StarOffice и Microsoft Office, языки программирования Java и C#, языковые платформы J2EE (Java 2 Platform, Enterprise Edition) и .NET Framework, концепции Sun ONE и Microsoft .NET.

 

Как заявляют некоторые эксперты, приверженцы каждой из компаний по разные стороны «демилитаризованной зоны» настойчиво утверждают, что одна из них обречена на поражение [1]. Кто же победит, если вообще победит? По оценке аналитиков из Gartner Group, в ближайшие годы все отчетливее будет прослеживаться тенденция к разделению Интернет-мира, включая электронный бизнес, на .NET и J2EE. В то же время о .NET пока приходится говорить лишь в будущем времени. Как было заявлено на последней всемирной конференции Microsoft Professional Developers Conference, прошедшей в конце октября 2001 г. в Лос-Анджелесе, .NET Framework в коммерческом виде появится только в феврале 2002 г., спустя почти два года с момента объявления о планах Microsoft.

Java как орудие конкурентной борьбы

 

Человечество никогда не испытывало недостатка в пророках. И хотя их предсказания сбывались крайне редко, мы по-прежнему продолжаем вверять свою судьбу тем, кто способен убедительно поведать нам о нашем будущем. В 1995 г. президент Sun Microsystems Стив Макнили, опираясь на авторитет Джеймса Гослинга, автора языка Java, горячо убеждал всех в том, что теперь Интернет станет другим, что Java совершит грандиозный переворот повсюду, начиная с бытовых приборов и заканчивая глобальными коммуникациями. В 2000 г. Билл Гейтс, основатель Microsoft, и Стив Балмер, глава Microsoft, опираясь на авторитет Андерса Хейльсберга (автора Turbo Pascal, Delphi и языка C#) и Бертрана Мейера (автора языка Eiffel и горячего поборника .NET), провозгласили новую инициативу — Next Generation Internet («Интернет нового поколения») и новую эру — эру платформы .NET. Но, к сожалению, красивые слова в области ИТ-индустрии довольно часто расходятся с реальными делами, и лишь время расставит все по своим местам.

 

Технологические новации, которыми нередко бравируют те, кто призывает мир под свои знамена, на поверку оказываются не такими уж новыми и технологичными. Были ли язык Java и построенная на нем платформа принципиально новыми в технологическом плане? Разумеется, нет. Все это по большей части умело созданные мифы [2].

 

Механизм виртуальных машин получил популярность благодаря разработке группой Никлауса Вирта так называемого p-кода и p-машины (переносимого Паскаль-кода и Паскаль-машины) и стал в первые годы развития Java основой этой технологии в плане обеспечения независимости от исполняемой платформы. Был он не только хорошо известен еще в конце 1960-х гг., но и за полтора десятилетия до появления Java использовался как вполне рядовой инструмент в проектах извечного конкурента Sun — корпорации Microsoft. Так, Multiplan (первая электронная таблица Microsoft) была реализована на языке Си с трансляцией в p-код. Он затем применялся как интерпретатор, позволяющий работать в среде операционных систем CP/M, MS-DOS и AppleDOS. Осенью 1982 г. Нейл Козен (Microsoft) всего за несколько дней сумел обеспечить с помощью технологии p-кода перенос Microsoft Word в среду Macintosh. Так что, следуя логике, разумный скептицизм в отношении правдивости лозунгов о Java априори можно распространить и на .NET.

 

Что же касается сферы маркетинга, то в этом плане язык Java действительно стал заметным явлением. Наиболее ярко об этом сказал (уже будучи президентом Novell) Эрик Шмидт, бывший директор по технологиям компании Sun: «Когда вы произносите слово «Java», то, что бы ни скрывалось за ним, на первый план выступают позитивные аспекты фирменного названия. Чувствуя, что это нечто солидное, люди возбуждаются, стремятся приобщиться. Даже таксисты знают: Java — это класс!» В новом тысячелетии официальные представители Sun предпочитают сравнивать Java с обычными джинсами — простой и удобной повседневной одеждой.

 

Теперь, когда эйфория заметно поутихла, редко вспоминают, для каких целей создавался язык и позиционировалась технология Java. Как гласит история, в 1992 г., едва был закончен прототип миниатюрного устройства *7 (Star7), давшего жизнь Java, президент Sun Скотт Макнили воскликнул: «Эта штука — прорыв. Теперь не подведите меня... Вы сделаете — мы победим. Мы продадим это. Мы убьем Hewlett-Packard, IBM, Microsoft и Apple одним ударом». Летом 1994 г. в Sun было принято решение на переориентацию технологии, тогда еще не носившей название Java, под Интернет — на уровне поддержки браузеров. В 1997 г. стала набирать силу компонентная архитектура JavaBeans, и практически одновременно появилось понятие сервлета (компоненты для реализации серверной части Web-среды). Язык и технология Java начали свое движение в сторону серверного и связующего ПО. Тот же 1997 г. был отмечен началом стандартизации Java-платформы и накалом противостояния Sun и Microsoft. В декабре 1999 г. переориентация на корпоративные решения была закреплена выпуском платформы J2EE.

 

Интересно, что двойственность в отношении собственной стратегии характерна для обоих непримиримых конкурентов. Нельзя не отметить, что противостояние «макромира» (в переводе с англ. Sun — «Солнце») и «микромира» (Micro-Soft — так первоначально называлась одна из крупнейших ныне корпораций, Microcomputer Software) стало мощным катализатором развития ИТ-индустрии. В то же время Sun начала разработки Java с прицелом на «микромир», а в результате переориентировалась на «макромир», мир корпоративных решений. Microsoft же, выдвигая .NET, претендует на «макромир», тогда как весьма вероятен такой сценарий развития событий, при котором .NET активно вторгнется в область «микромира».

 

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

 

Вспомним, зачем корпорации Sun, для которой программное обеспечение, а уж тем более инструментальное, не было основой бизнеса, вдруг понадобилось браться за то, в чем она никогда не была сильна (что лишний раз подтвердила и история развития Java) — за создание языка программирования и связанной с ним программной среды. Рынок серверов и рабочих станций, а также UNIX-систем к началу 1990-х гг. был фактически поделен. Microsoft же в те годы продолжала экспансию своего семейства Windows за пределы рынка ПК и неумолимо вторгалась на территорию своего вероятного противника. Нужно было принимать меры, и в качестве разящего меча выбрали технологию Java. Корпорация Microsoft, во всеуслышание заявив о планах развертывания .NET, вроде бы не собирается повторять ошибок конкурента и играть не на своем поле — роль Windows в стратегии Microsoft по-прежнему центральная. Однако не стоит загадывать наперед, лучше попробуем выяснить, откуда появилось название .NET и что по сути за ним скрывается.

Что такое .NET

 

Java ведет свою публичную историю с 23 мая 1995 г., а Microsoft .NET — с 22 июня 2000 г. Пять лет отделяют два этих ярких явления друг от друга. За истекшие годы Java прошла непростой путь — от языка программирования, Интернет-технологии, инструментальной и операционной сред, компонентной инфраструктуры к языковой корпоративной платформе. А Microsoft.NET начинает свой путь сразу во всех направлениях.

 

В знаменитой книге Билла Гейтса «Дорога в будущее» [3], вышедшей в оригинале еще в 1995 г., можно отыскать слова-провозвестники новой философии корпорации Microsoft, философии, получившей необычное название .NET (dot-NET). Вот они: «Сегодня мы все отправляемся в новый великий путь. Никто не знает наверняка, куда мы попадем на этот раз, но я вновь уверен, что эта революция коснется еще большего числа людей и продвинет общество гораздо дальше... Выгоды и проблемы, которые сулит грядущая революция в области связи, очевидно, окажутся грандиознее тех, что принесла с собой эра персональных компьютеров».

 

Что же такое .NET? Коротко определение .NET, приведенное Бертраном Мейером, звучит так [4]: «Это открытая языковая платформа для корпоративной и Web-разработки». На самом же деле эти слова скорее относятся к .NET Framework. Что касается .NET, то это куда более объемное понятие, включающее в себя идеологию создания распределенных информационных служб, соединенных XML-магистралями и ориентированных на взаимодействие персон, а также компаний и программ через средства глобальных коммуникаций, прежде всего через Интернет. Ключевой элемент в .NET, метаязык XML, сейчас, пожалуй, излишне идеализируется. В то же время это едва ли не единственная всеми признаваемая точка соприкосновения разнородных миров, возводимых гигантами ИТ-индустрии.

 

Откуда появилось название .NET, несомненно намекающее на сетевой характер всех составляющих новой платформы? Первое, что приходит в голову: Net давно стало синонимом слова Интернет, и тем самым .NET делает акцент на реорганизацию всемирной сетевой среды. Вторая версия: корпорация Microsoft выбрала имя «.NET» для нового поколения своих продуктов и сервисов (ASP.NET, VB.NET, JScript.NET, Visual Studio.NET, ADO.NET, Office.NET, Passport.NET, MSN.NET, bCentral.NET) по аналогии с подходом корпорации IBM (NET.Data, Net.Commerce и др.) с той лишь разницей, что «.NET» вместо префикса стал выполнять роль суффикса.

 

Нельзя не отметить, что суффикс «.NET» в названии продуктов и технологий Microsoft появился давно, еще в ноябре 1984 г., когда вместе с сетевой версией MS-DOS была выпущена программа MS-NET. (Она тогда обеспечивала одновременное использование файлов и доступ пользователей к общему жесткому диску.)

 

Как бы то ни было, жизнь платформе .NET дал проект под кодовым названием Next Generation Windows Services. В имени проекта фигурируют два ключевых слова — Windows и Services, определяющих суть .NET. Действительно, трудно не заметить, что если Java подавался под соусом «один язык — множество независимых ОС», то .NET уже подается как «одна ОС — множество независимых языков». Корпорация Sun сделала ставку на язык (Java) и все остальное обустраивает под него. Microsoft, контролируя практически весь рынок ОС для ПК, не собирается (по крайней мере, в обозримом будущем) уступать лидерство, завоеванное Windows. При этом у Microsoft есть средство для маневра: за счет наличия языковой инфраструктуры CLI платформа .NET не привязана намертво к Windows, и в ближайшее время, возможно, появятся реализации .NET под другие операционные платформы, в том числе под Linux.

 

Нетрудно заметить, что в области программного обеспечения тремя китами до сих пор остаются язык программирования, ОС и СУБД. Если продолжать логическую цепочку «один язык — множество независимых ОС» (Java), «одна ОС — множество независимых языков» (.NET), то в области СУБД на подобную роль центра притяжения ИТ-решений лучше всех подходит Oracle (одна СУБД — множество независимых ОС — множество независимых языков).

 

Компьютерные языки всегда были основой основ компьютерного мира. Но на нынешнем этапе развития .NET языки C# и J#, активно продвигаемые корпорацией Microsoft, выполняют в большей степени тактические функции, равно как и изюминка .NET — языковая инфраструктура CLI (Common Language Infrastructure).

 

Скрытое противостояние на уровне языков (Java C#) можно рассматривать как весьма хитроумный ход со стороны Microsoft. По всей видимости, C# до поры до времени будет находиться в тени, пока не подменит, не поглотит и не вытеснит родственный ему язык Java. (К 2005 г., по оценке Gartner Group, C# станет настолько популярным, что соотношение применения C# и Visual C++ достигнет уровня 3:2.)

 

Казалось бы, после судебного вердикта, вынесенного в январе 2001 г., Microsoft обязана была не только выплатить компенсацию, но и поставить крест на развитии Java. Однако корпорация Microsoft продолжает поддержку Java (прежде всего в рамках программы JUMP — миграции в C# и J#), в том числе и через своих партнеров — компании Rational и Hewlett-Packard, лишив при этом корпорацию Sun своего мощного канала распространения Java. (Недавняя история с изъятием виртуальной машины Java из Windows XP — наглядное тому подтверждение.)

 

В битве как языков, так и платформ большую роль будет играть принятие международных стандартов. Важно отметить, что, имея опыт успешной стандартизации языка JScript в Европейской Ассоциации производителей компьютеров (ECMA), в октябре 2000 г. Microsoft при поддержке Hewlett-Packard и Intel направила в ECMA для принятия стандарта язык C# и инфраструктуру CLI. Удивительный факт: стартовавшие на пять лет раньше язык и платформа Java до сих пор не имеют международного стандарта. Осенью 1997 г. Sun направила Java в ISO, но стандарт до сих пор не принят и дело тихо похоронено. Весной 1999 г. Sun направила технологию Java на стандартизацию в ECMA. Правда, в декабре того же года Sun решила отозвать свою заявку, обосновав это стремлением «защитить целостность технологии Java и инвестиций, сделанных мировым сообществом».

Microsoft и Sun: под знаком меча

 

Становление Java, безусловно, проходило под знаком противоборства Sun и Microsoft. По мнению Эрика Шмидта, основная цель, которую Sun ставила перед собой, — повсеместно распространить Java и выиграть у Windows битву за единую платформу. Достигнута ли она в настоящее время? Очевидно, нет. Более того, по мнению аналитиков Gartner Group, доля платформы .NET стремительно начнет нарастать и к 2004 г. достигнет 80%. И все же предсказывать победителя пока рано. В битве гигантов ИТ-индустрии многое решает не только и не столько совершенство технологий, сколько умение овладевать умами масс, выражаемое в привлекательной идеологии, приобретающей едва ли не религиозный оттенок.

 

Свое право, как и в рыцарские времена, Microsoft и Sun доказывают мастерством владения клинком. Средневековье было священным царством меча, являвшего прообраз креста. Меч считался живым существом и обладал магическими свойствами. Каждому великому мечу давалось имя. Его рукоять представляла собой священный ковчег, в котором хранились частицы мощей. Меч был оружием избранных и посвященных. Только равному с равным дозволялось скрещивать оружие. Рыцарь был только служителем меча, вершившим высшую справедливую волю. На клинке меча высекались слова молитвы, которую он возглашал каждым своим ударом. «Сеть — это компьютер» — вот девиз, который начертан на мече Sun, носящем экзотическое имя Java. «Компьютер — это сеть» — такой девиз все более явственно проступает на мече Microsoft с магическим именем .NET.

Java против C++?

Java во многом выглядит как C++ и так естественно кажется, что C++ будет заменен Java. Но я начал с вопроса о такой логике. Для одних вещей C++ все еще имеет некоторые особенности, которых нет в Java, и, хотя, имеется много обещаний относительно того, что однажды Java станет быстрее чем C++, мы видели равномерные усовершенствования, но никаких разительных достижений. Так же продолжается определенный интерес к C++, так что я не думаю, что этот язык скоро отомрет. (Языки, кажется, висят вокруг. Разговаривая на одном из моих “промежуточный/продвинутый семинар по Java”, Allen Holub заявил, что два наиболее часто используемых языка - это Rexx и COBOL, в таком порядке.)

Я начинаю думать, что сила Java лежит в небольшом отличие области действия, по сравнению с C++. C++ - это язык, который делает попытку заполнить шаблон. Несомненно, он был адаптирован определенными способами для решения определенных проблем. Некоторые инструменты C++ комбинируют библиотеки, модели компонентов и инструменты генерации кода для решения проблемы разработки оконных приложений для конечного пользователя (для Microsoft Windows). И теперь, И все таки, что используют большинством разработчиков для Windows? Microsoft Visual Basic (VB). Несмотря на факт, что VB производит код, который становится неуправляемым, когда программа становится несколько страниц длины (и синтаксис, который положительно может мистифицировать) Так как есть успех и популярность VB, но это не очень хороший пример языкового дизайна. Было бы хорошо иметь легкость и мощность VB без неуправляемого результирующего кода. И в этом, я думаю, Java будет блистать: как “следующий VB”. Вы можете содрогнуться или нет, услышав это, но думать о том, как много в Java предназначено для упрощения программисту решений проблем уровня приложения, таких как работа в сети и кросс-платформенность, и теперь есть дизайн языка, который позволяет создание очень больших и гибких тел кода. В добавок к этому Java фактически имеет наиболее крепкий тип проверки и обработки ошибок системы, из того что я видел в языках, так что вы можете сделать существенный прыжок вперед в производительности программирования.

Должны ли вы использовать в ваших проектах Java вместо C++? Не в Web апплетах есть две проблемы для исследования. Первая, если вы хотите использовать много существующих библиотек C++ (и вы, конечно, получите большую прибавку производительности), или вы имеете существующий базовый код на C или C++, то Java может замедлить вашу разработку, а не ускорить ее.

Если вы разрабатываете весь ваш код, начиная с шишек, то простота Java по сравнению с C++ значительно сократит время разработки — рассказы очевидцев (истории команд C++, с которыми я говорил и кто перешел на Java) сообщают об удвоении скорости против C++. Если производительность Java не имеет значения или вы можете чем-нибудь компенсировать это, явные проблемы времени-до-продажи делают затруднительным выбор C++ против Java.

Наибольшая проблема - производительность. Интерпретатор Java - медленный, даже в 20-50 раз медленнее, чем C по сравнению с обычным интерпретатором Java. Это улучшится через какое-то время, но все еще будет оставаться значительным числом. Компьютеры о скорости; если бы что-то значительно быстрее было сделать на компьютере, то вы бы делали это руками. (Я даже слышал советы, что вы занимаетесь Java чтобы сократить время разработки, чтобы затем, используя инструменты и библиотеки поддержки, переводите ваш код на C++, если вам необходимо высокая скорость выполнения.)

Ключевым моментом, делающим Java подходящим для большинства проектов - это появление ускорителей, называемый “just-in time” (JIT) компилятор, собственная “hotspot” технология Sun, и компиляторов платформозависимого кода. Конечно, компиляторы платформозависимого кода устранят рекламируемое кросс-платформенное выполнение скомпилированной программы, но они так же повысят скорость выполнения, приблизив ее к C и C++. А кросс-платформенная программа на Java будет много легче, чем если это делать на C или C++. (Теоретически, вы должны просто перекомпилировать, но это обещание было сделано и для других языков.)

I. Вначале немного теории
Java - это язык программирования. Существуют 3 различные редакции Java:
JSE (Java Standard Edition) - это Java для компьютеров (в том числе для КПК);
JEE (Java Enterprise Edition) - Java для серверов;
JME (Java Micro Edition) - Java для мобильных телефонов, с очень урезанными возможностями, имеющая мало общего с JSE.
Кроссплатформенность Java позволяет запускать одни и те же Java-программы как на ПК, так и на КПК.
Программы на Java обычно представлены в виде файлов-архивов с расширением jar, а также в виде папок, к которым обычно прилагаются (или внутри которых находятся) html'ники для их запуска браузером.
.
Апплет - это программа, написанная на JSE. Коды JSE непосредственно в коды процессора транслируют JRE.
JRE - Java Runtime Environment - это окружение для выполнения программ, интерпретатор, применительно к КПК обычно именуемый Java Virtual Machine (JVM), т. е. виртуальной ява-машиной. Java Virtual Machine, работающие на настольных и мобильных компьютерах, как правило понимают только коды JSE и JEE, с кодами JME они, за редкими исключениями, не работают.
Апплеты, как правило, выполняются в окружение браузера. При этом используются виртуальные ява-машины, которые или встроены в браузеры, или являются Java-плагинами к Internet Explorer'у. Выполнение апплета браузерами может осуществляться on-line (если апплет скачивается из сети и не остается на КПК в виде файла) или же off-line (если файл с апплетом находится на КПК).
Апплеты могут также выполняться и отдельно от браузера, для этого в класс апплета добавляют функцию "main()". То есть апплет может запускаться отдельно от браузера, если он реализует указанную функцию (например программа Toonel, используемая на КПК для сжатия интернет-трафика). Класс апплета с функцией "main()" считается точкой входа в программу по умолчанию, при этом такая точка входа может быть не одна. При старте программы вызывается метод main() данного класса.
Апплеты, выполняемые отдельно от браузера, выполняются отдельно устанавливаемыми виртуальными ява-машинами (CrEme JVM, Jeode Runtime JVM, IBM J9 RRPO10 JVM).
.
Сервлет - это программа, написанная на JEE. Рассматривать в рамках данной темы сервлеты и JEE мы не будем.
.
Мидлет - это программа, написанная на JME.
На мобильных телефонах мидлеты выполняются непосредственно (runtime) килобайтными виртуальными машинами (KVM), преобразующими коды JME в коды процессора.
Для реализации на настольных и мобильных компьютерах выполнения мидлета необходимо симитировать (эмулировать) поведение мобильного телефона, как то: дисплей всего один и нет двигающихся окон, софт-кнопки и цифровая клавиатура, для рисования есть только холст с ограниченным набором функций, для ввода текста есть стандартный набор полей ввода - вот это всё надо реализовать в таком виде, в каком это представлено в конкретном телефоне или в каком-то гипотетическом телефоне. Эту функцию на компьютерах (в том числе на КПК) выполняют эмуляторы функций мобильных телефонов, преобразующие коды JME как правило в коды JSE/JEE (с последующей их передачей на встроенную в эмулятор Java Virtual Machine), или непосредственно в коды процессора или ОС. Из числа эмуляторов, работающих на КПК, здесь представлены: TAO Intent Java MIDlet manager, IBM J9 WEME MIDP20 JMM, Coretek Delta java manager, Mitac JVM. Эмуляторы функций мобильных телефонов обычно именуют эмуляторами мидлетов или эмуляторами Java, иногда менеджерами мидлетов, хотя менеджер мидлетов - это лишь пользовательский интерфейс эмулятора.
Таким образом, виртуальные ява-машины, работающие на настольных и мобильных компьютерах, выполняют, как правило, программы, написанные на JSE, т.е. апплеты. Коды JME, на котором написаны мидлеты, Java Virtual Machine, за редкими исключениями, не понимают и поэтому работать с мидлетами не могут. По изложенной причине ни игры для мобильников, ни Opera mini запустить на Java Virtual Machine невозможно. Исключением из этого утверждения является виртуальная ява-машина CrEme JVM, которая имеет надстройку над JSE - эмулятор для исполнения кода JME, с довольно скромными возможностями, позволяющими запускать небольшие программы на JME.
Для выполнения мидлетов на настольных и мобильных компьютерах предназначены эмуляторы функций мобильных телефонов. Эмуляторы понимают только коды JME и поэтому запускают только мидлеты. Работать с программами, написанными на JSE (т.е. с апплетами), эмуляторы не могут.
Изложенный вывод не является универсальным правилом и отражает ситуацию, складывающуюся на компьютерах, работающих под управлением Windows (в том числе Windows mobile). На мобильных устройствах под управлением Palm OS коды JME также интерпретируются эмуляторами, а вот на смартфонах под управлением Symbian эмуляторы не работают, там витруальные ява-машины исполняют коды JME непосредственно.
.
Чтобы разобраться в том, что за Java-программу (апплет или мидлет) мы видим перед собой, необходимо раскрыть архив ***.jar. Если внутри архива ***.jar нет папки META-INF с вложенным в нее файлом MANIFEST.MF, значит перед нами апплет, не поддерживающий функцию "main()", т.е. это апплет, запускаемый браузером.
Если же внутри архива ***.jar есть папка META-INF с вложенным в нее файлом MANIFEST.MF, то:
- если в MANIFEST.MF есть строка "Main-Class …", значит перед нами апплет, запускаемый Java Virtual Machine отдельно от браузера;
- если в MANIFEST.MF есть строка "Midlet1 - ...", значит перед нами мидлет, запускаемый эмулятором. Последний показатель строки "Midlet1 - ..." - это запускаемый класс мидлета, с которого начинается выполнение програмы.
Может быть и такой вариант: внутри архива ***.jar есть папка META-INF с вложенным в нее файлом MANIFEST.MF, но в MANIFEST.MF нет ни строки "Main-Class …", ни строки "Midlet1 - ...". Это означает, что перед нами апплет, запускаемый браузером.
Если Java-программа представлена в виде zip-архива или папки с набором классов, то это также означает, что мы видим перед собой апплет, запускаемый браузером.
.
II. Установка и запуск мидлетов на КПК
А. Обзор используемого софта - эмуляторов функций мобильных телефонов (эмуляторов мобильной Java)
Эмуляторы предназначены для выполнения мидлетов (в основном игр для мобильных телефонов) на КПК.
1a) TAO Intent Java MIDlet manager (TAO Intent JMM) версии 10.1.2.57, известный также под именем своего cab-файла Java_10.1.2.57_WWE.cab. Этот cab-файл выложен на форуме (выкладывал Sterh78), прямая ссылка на скачивание: TAO Intent JMM v. 10.1.2.57
Данный эмулятор установлен в качестве штатного на Джемах (Кьютеках). На некоторых моделях КПК этот эмулятор может не работать. Для исправления некоторых его проблем Chuma выложил файл elate.dll, который следует скачать и скопировать на КПК с заменой ранее установленного файла. После этого эмулятор как правило начинает запускаться.
На WM 5.0 данная версия эмулятора не работает.
Эмулятор устанавливается только в основную память, на Storage card не грузится даже при использовании CabInstaller’а, все установившиеся мидлеты пишет в Windows/app/jam/midlets. Однако после удаления из Менеджера MIDlet какого-либо мидлета он из этой папки может автоматически не удалиться, нужно это проверять и при необходимости удалять вручную.
Jad-файл при установке мидлетов не требуется. С буфером обмена не работает.
.
1b) Новая версия TAO Intent Java MIDlet manager (TAO Intent JMM) – v.10.1.2.76, работает также на WM 5.0. Chuma выложил на форуме cab-файл этой версии эмулятора, прямая ссылка на скачивание: TAO Intent JMM v.10.1.2.76
Данная версия отличается от прежней большей устойчивостью в работе и возможностью работы на WM 5.0, других существенных отличий не имеет.
Если v.10.1.2.76 отказывается работать, ее можно править тем же elate.dll, ссылка на который содержится выше для v. 10.1.2.57.
Если эмулятор запустился, но при запуске установленных в него мидлетов появляется сообщение об ошибке, может помочь переустановка шрифта tahoma.ttf, подробности см. в сообщении Mforward'а № 434936: Переустановка шрифта
.
TAO Intent JMM, установившийся в основную память, можно вручную перенести на карту памяти вместе с мидлетами, установленными в его менеджер, и он будет продолжать свою работу уже на карте без всяких проблем. Более подробно об этом см. в сообщении № 364653: Порядок переноса эмулятора TAO Intent JMM на карту памяти
Удаление эмулятора TAO Intent JMM – это целая проблема, поскольку разного рода удалители его не видят. Для удаления нужно или делать хард-резет, или удалять его вручную. Chuma выложил в этой теме список файлов, создаваемых данным эмулятором, которые необходимо удалять: Удаление TAO Intent JMM вручную
.
2) IBM J9 WEME MIDP20 JMM - еще один эмулятор явы. Полное наименование этой программы - The J9 VM, the core of WebSphere Everyplace Micro Environment (WEME), the IBM implementation of the Java Virtual Machine (JVM) Specification.
Описание и ссылка на скачивание старой версии (v. 1.3) данного эмулятора, известной также под именем своего cab-файла weme-midp20-wm2003-arm_22.cab, находятся в сообщении № 218058: IBM J9 WEME MIDP20 JMM v. 1.3 Версия работает на WM 5.0.
Новая версия эмулятора IBM J9 WEME MIDP20 JMM - v. 6.1.0 также работает на WM 5.0. Выложенные здесь варианты имеют поддержку JSR75 путем установки патча, а также поддержку VGA. Прямые ссылки на скачивание:
- версии для QVGA (cab-файл): IBM J9 WEME MIDP20 JMM - v. 6.1.0 - QVGA
- версии для VGA: IBM J9 WEME MIDP20 JMM - v. 6.1.0 - VGA
Ссылки на новую версию эмулятора выложил dogmat73, а yukon_28 собрал все составляющие версии для QVGA в единый cab-файл.
Версия для VGA - это пока не дистрибутив ехе или cab, а копия содержимого папки установки IBM на КПК. Порядок ее установки см. в сообщении volta_john № 353237: Порядок установки новой VGA-версии эмулятора IBM J9 WEME MIDP20 JMM - v. 6.1.0
Эмулятор при запуске образует менеджер мидлетов под именем "Midlet HQ". Все установившиеся мидлеты он пишет в My Documents/temp. После удаления из "Midlet HQ" какого-либо мидлета он из этой папки может автоматически не удалиться, нужно это проверять и при необходимости удалять вручную. Эмулятор хорошо работает на Storage card. Jad-файл при установке мидлетов не требуется. Работает с буфером обмена.
Новая версия эмулятора работает существенно лучше предыдущей.
.
Если в v. 6.1.0 для QVGA Вам не понравился шрифт, его можно заменить на более крупный или более разреженный, подробности см. в сообщении № 324711: Шрифты для IBM J9 WEME MIDP20 JMM v. 6.1.0 для QVGA
.
Стандартный комплект IBM J9 WEME MIDP20 JMM не поддерживает спецификацию JSR75, что не позволяет работающим на этом эмуляторе мидлетам видеть файловую систему КПК. Однако существует небольшой 20-килобайтный патч, установка которого в эмулятор добавляет в него указанную спецификацию, в результате чего работающие на этом эмуляторе мидлеты (например, Opera mini) начинают видеть файловую систему КПК в полном объеме. Прямая ссылка на скачивание патча: j9fix.zip Патч устанавливается в эмулятор согласно приложенной к нему инструкции. После установки патча перенастраиваем разрешения модифицированной Opera mini в MIDlet HQ - Actions -> Permissions: Comm, File Read и File Write нужно установить в Always allowed (настройки предоставлены volta_john). В результате модифицированная Opera mini превращается в полнофункциональный браузер, который может скачивать собственными средствами (без поддержки внешнего браузера) любые файлы (причем с докачкой) в файловую систему КПК. Скачанные файлы могут быть затем открыты в наитивном (подлинном) формате.
.
3) Coretek Delta java manager – эмулятор явы, применяемый в основном для запуска ява-игр, позволяет использовать много игр, не запускаемых на других эмуляторах. Работает с буфером обмена. Размер экрана 176x220, как на смартфоне, по эмулятору имеется отдельная тема: Coretek Delta java manager
Наиболее ранняя из представленных на форуме версий - версия 2003 года переведена Chuma с китайского на английский. Данная версия создает в основной памяти в Program Files папку Coretek, все игры устанавливаются в нее. В случае удаления игры она без проблем удаляется и из этой папки. При установке мидлетов требуется jad-файл. На WM 5.0 эта версия работает только в оригинальном (китайском) варианте.
Новая версия 2006 года предназначена для WM 5.0, но так же, как и предыдущая, заточена под смарты. На покетах работает с разрешением 176х220. Данная версия полностью соответствует спецификациям от Sun (даже формы такие же как в офиц. эмуляторах), установка игр осуществляется из jar (не надо jad), изначально на английском языке, работает с карты памяти. На WM 2003 не работает вообще. Версия для Storage Card устанавливается по инструкции из скачиваемого архива. Папка "com" применяется адаптации мидлетов.
Прямые ссылки на скачивание (все версии выложены Chuma):
Версия 2003 года: Coretek Delta java manager
Новая (2006 г.) версия для WM 5.0 (cab): Java.Coretek.MIDP.2.1.Bundle.cab
Новая (2006 г.) версия для WM 5.0 для установки на Storage card: Coretek2_Storage_Card.rar
.
4) Mitac JVM - эмулятор, выложенный на форуме santass. Прямая ссылка на скачивание: Mitac JVM
Выложивший его santass писал, что он "заточен под смарты", при этом он отмечал хорошую работу этого эмулятора с мидлетами на своем девайсе.
5) Esmertec Java - еще один эмулятор для смартов, причем работающих на Windows Mobile 5.0 For Smartphone. Ссылку на скачивание предоставил unrealwolf, на форуме эмулятор выложил volta_john. Прямая ссылка на скачивание: Esmertec Java
.
6) CrEme JVM. Виртуальная ява-машина CrEme (см. ниже) также может выполнять функции эмулятора.
.
B. Порядок установки и запуска мидлетов на КПК
Представленные выше эмуляторы образуют при запуске менеджеры мидлетов, являющиеся пользовательским интерфейсом эмуляторов. Поэтому мидлеты, как правило, вначале устанавливаются в менеджеры мидлетов, а затем уже из менеджеров производится их запуск.
Для установки мидлета в менеджер достаточно тапнуть стилусом на файл ***.jar, и мидлет установится самостоятельно. Или можно вначале открыть менеджер, дальнейший же порядок действий будет зависеть от используемого эмулятора:
- в менеджере эмулятора TAO Intent JMM нужно тапнуть на "Установить", менеджер покажет все имеющиеся на КПК jar-файлы, затем тапнуть на нужный jar-файл, и он установится в менеждер;
- в менеджере эмулятора IBM J9 WEME MIDP20 JMM нужно указать в сроке url путь к мидлету, находящемуся на карте памяти, следующим образом - file://Storage cardимя мидлета.jar. Указанный формат пути выложил на форуме Konrad.
Если нет желания или необходимости устанавливать мидлеты в менеджер эмулятора IBM J9 WEME MIDP20 JMM, запуск мидлетов можно производить при помощи ярлыков. Если указанный эмулятор и запускаемый им мидлет находятся на Storage card, ярлык для запуска мидлета выглядит так:
77#"Storage cardIBM MIDP20inemulator.exe" "-Xdescriptor:Storage cardOpera miniopera117.jar" (образцы выложили в данной теме Konrad и VitAR).
Данный образец можно использовать для запуска любых мидлетов, изменяя при этом только пути к файлам. Другие параметры данного образца, включая расстановку кавычек и пробелов, изменять нельзя. Образцы ярлыков можно также скачать по этой ссылке (приложение к сообщению Konrad): MIDLETS.zip
Порядок установки мидлетов в эмулятор Coretek Delta java manager несколько отличается, подробности см. в теме: Coretek Delta java manager
При запуске игр на Coretek'е в большинстве случаев виртуальная клавиатура становится неактивной. Чтобы пофиксить это, необходимо, не закрывая Coretek, запустить любую программу, использующую виртуальную клавиатуру (например, нажать хард-кнопку Календаря), и, не закрывая эту программу, переключиться в Coretek. В результате клавиатура не исчезает и остаётся активной (метод выложен volta_john).
Осутствие в нижнем баре софт-кнопок при запуске игры на Coretek'е не означает, что их там нет. Они просто невидимы, и находятся рядышком в левом углу нижнего бара, очень узкие. Правда, не всегда работают, хоть и исправно нажимаются.
Порядок запуска мидлетов виртуальной ява-машиной CrEme JVM также весьма специфичен. Если не удается запустить мидлеты тапом на файл ***.jar, следует прочесть подробное изложение данного вопроса в сообщении № 213155: Особенности запуска мидлетов виртуальной ява-машиной CrEme
Порядок запуска мидлетов эмулятором Esmertec Java подробно изложен volta_john в сообщении № 398636: Запуск мидлетов эмулятором Esmertec Java
Эмулятор работает на смартфонах под управлением Windows Mobile 5.0 For Smartphone, тестировался на Qtek 8310.
На коммуникаторах BenQ P50 и Gigabyte G'Smart установлены свои эмуляторы (на BenQ P50 эмулятор называется iaJET, а на Gigabyte G'Smart название мне неизвестно). Объединяет эти эмуляторы то обстоятельство, что мидлеты на них запускаются тапом на файл ***.jad .
.
Мидлеты, установленные в менеджеры мидлетов, запускаются тапом на соответствующую иконку или нажатием на Launch.
.
Поскольку некоторые эмуляторы, а также виртуальная ява-машина CrEme запускают мидлеты через jad-файлы, необходимо в таких случаях в папку с файлом ***.jar помещать (перед установкой мидлета в менеджер) и одноименный файл ***.jad, т.е. эти файлы должны находиться рядом, например:
Opera mini.jar
Opera mini.jad.
Если файл ***.jad отсутствует, его следует выделить из файла ***.jar на настольном ПК с помощью программы Jadmaker (выложил на форум Chuma): Jadmaker
Запускаете на настольном ПК Jadmaker, кликаете правой клавишей мыши на файл ***.jar, затем - на строку «Make JAD» в контекстном меню, и файл ***.jad появляется.
Выделение jad-файла вожможно также непосредственно на КПК путем редактирования файла Manitest.mf, более подробно об этом см. в сообщении volta_john № 365262: Изготовление jad-файла для мидлета на КПК
.
По указанной ниже ссылке можно открыть крупную базу с играми для мобильников, большинство из которых нормально запускается и работает на КПК (выложена Chuma): _http://www.masyaka.net.ru/files/games/s700/ Ссылки на прямое скачивание отдельных игр, запускаемых на КПК (также выложены Chuma): AsphaltUrban RedFaction Allods Doom. Chuma писал об этой игре: "Используйте кнопки 0,*,# на экранной клаве (7- смена оружия). Довольно игра бельно." GravityDefied, выложенная Цитрус: GravityDefied И еще 10 игр, выложенные Konrad: MIDLETS.zip Я также выложил в этой теме архив с 70 играми - мидлетами, которые нормально запускаются на КПК, ссылка на скачивание: Java-игры на КПК На форуме также имеется тема, где игры - мидлеты выкладываются по отдельности с картинками и описанием: Java Игры для одноименной машины Не следует думать, что эмуляторы для КПК смогут запустить любой мидлет от любого телефона. Что-то запустится, а что-то нет. Игры от Nokia, обычно не запускающиеся на эмуляторах для КПК, можно преобразовывать в формат, пригодный для воспроизведениях на эмуляторах для Windows mobile, при помощи специальных Java-адаптеров Motomidman и FullJava (ссылки выложили соответственно volta_john и Chuma), подробности см. в сообщении № 391312: Motomidman & FullJava Существует также достаточно много игр, которые хоть и запускаются на КПК, но играть в них практически невозможно (например Splinter Cell, Spider Man). Жмешь на клавишу, и герой несется вперед, насколько программа позволяет ему двигаться в данном направлении, а затем замирает, и чтобы оживить его, нужно нажать на несколько клавиш, затем все повторяется. Играть, конечно, невозможно. При управлении играми с виртуальной клавиатуры существует также проблема в том, что цифры 1, 2, 3 на мобильнике располагаются в верхнем ряду клавиш, сответственно этому запрограммированы и игры. На КПК эти цифры располагаются в нижнем ряду, и поэтому при управлении с КПК герои игр движутся как-бы не в том направлении. Исправить данные проблемы можно установкой продвинутых клавиатур от Макцентра или от Resco (Resco ставлю на второе место, так как она не во играх исправляет ситуацию), а также патча от volta_john, более подробно см. об этом в сообщении volta_john № 435173: Управление в java-играх (мидлетах). Известные проблемы и некоторые способы их решения. Практически любой мидлет можно запустить на эмуляторе для настольного ПК от программера kwyshell'а . Вес эмулятора - всего 1.5 Мб, скачивается по ссылке _http://home.kimo.com.tw/kwyshell/Download/MidpX/MidpX.exe (ссылку выложил Chuma).
Еще вариант для настольного ПК - подборка в количестве 130-ти лучших мидлетов, перекомпилированных в JSE, которые с очень хорошим качеством запускаются на ПК при помощи бесплатного Java-плеера Mpowerplayer, подробности см. в сообщении № 391335: Mpowerplayer

Hosted by uCoz