ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для мобильного устройства

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡ΠΊΠ°ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠΎΡ‚ΠΎΠΌΠΊΠΈ класса Screen ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½Π°Π±ΠΎΡ€ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для высокоуровнСго взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Ρ„ΠΎΡ€ΠΌΡ‹, поля Π²Π²ΠΎΠ΄Π°, списки ΠΈ Ρ‚. ΠΏ.). Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Π½Π°Π±ΠΎΡ€ вСсьма ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ (ΠΎΠ΄Π½Π°ΠΊΠΎ достаточный) возмоТностСй для взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π½Π°Π±ΠΎΡ€ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ…, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… интСрактивности (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΈΠ³Ρ€Π°Ρ…), Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚авляСтся… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для мобильного устройства (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π€Π°ΠΊΡƒΠ»ΡŒΡ‚Π΅Ρ‚ «Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΡΠΈΡΡ‚Π΅ΠΌΡ‹ управлСния»

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ указания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «Π Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ систСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ»

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для мобильного устройства.

Москва, 2009

  • ОглавлСниС

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹

Задания ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

Задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы

1. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° MIDP прилоТСния

2. ΠžΡΠ½ΠΎΠ²Ρ‹ создания ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ²

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

ЦСль Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ знания ΠΎΠ± ΠΎΡΠ½ΠΎΠ²Π°Ρ… создания MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… устройств Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Java. ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ javax.microedition. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ знания для создания MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Задания ΠΊ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚СорСтичСским ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ, прСдставлСнным Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ… ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ мСтодичСским указаниям ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Скстом задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅.

Задания ΠΊ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅

Π—Π°Π΄Π°Π½ΠΈΠ΅ 1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ мСню ΠΈΠ³Ρ€Ρ‹, содСрТащСС ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

1.1. запуск ΠΈΠ³Ρ€Ρ‹

1.2. ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ настройки.

2. Π’ ΠΈΠ³Ρ€Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π°Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΎΡ‡ΠΊΠΈ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ сохраняСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹.

Π˜Π³Ρ€Π° выбираСтся самим студСнтом.

Π—Π°Π΄Π°Π½ΠΈΠ΅ 2.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвСр ΠΎΠ±ΠΌΠ΅Π½Π° тСкстовыми сообщСниями.

1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² Π²ΠΈΠ΄Π΅ строк ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΡΠΊΡ€Π°Π½ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°.

2. Π‘Π΅Ρ€Π²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Ρ‚. Π΅. ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

3. Для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ»Π°Ρ‚ΡŒ строку «exit».

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для сСрвСра ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями.

1. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ.

По Π²Ρ‹Π±ΠΎΡ€Ρƒ студСнта ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡΠ΅Ρ€Π²Π΅Ρ€Π°, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π»ΠΈΠ±ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, ΠΊΠ°ΠΊ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… прилоТСния.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°

ΠžΡ‚Ρ‡Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΡƒ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ.

Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΡ‚Π»Π°ΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, содСрТащСС описаниС интСрфСйсов всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ коммСнтариями.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ вопросы.

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ MIDP?

2. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° MIDP?

3. Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ класс MIDlet ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹?

4. Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ осущСствляСтся взаимодСйствиС MIDP прилоТСния с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ?

5. Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ класс Canvas ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹?

1. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° MIDP прилоТСния

MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ структуру, которая описана Π½ΠΈΠΆΠ΅. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅, называСтся ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠΌ (midlet). ΠœΠΈΠ΄Π»Π΅Ρ‚Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² JAR Π°Ρ€Ρ…ΠΈΠ², ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ JAR — Π°Ρ€Ρ…ΠΈΠ²Π΅ ΠΌΠΎΠ³ΡƒΡ‚ находится сразу нСсколько ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ². Архив с ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°ΠΌ (ΠΈ) называСтся MidletSuite (Π½Π°Π±ΠΎΡ€ ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ²)

Набор ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ² состоит ΠΈΠ· JAR — Π°Ρ€Ρ…ΠΈΠ²Π°, содСрТащСго ΠΌΠΈΠ΄Π»Π΅Ρ‚ (Ρ‹), Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы ΠΈ Ρ€Π΅ΡΡƒΡ€ΡΡ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»Ρ‹ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ ΠΈ Ρ‚. ΠΏ.); JAR — манифСста (JAR Manifest), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой Ρ„Π°ΠΉΠ», находящийся Π² JAR — Π°Ρ€Ρ…ΠΈΠ²Π΅ (Ρ„Π°ΠΉΠ» manifest. mf Π² ΠΏΠ°ΠΏΠΊΠ΅ META-INF Π² ΠΊΠΎΡ€Π½Π΅ Π°Ρ€Ρ…ΠΈΠ²Π°); дСскриптора прилоТСния (Application Descriptor) — это Ρ„Π°ΠΉΠ» с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ JAR — Π°Ρ€Ρ…ΠΈΠ² ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ JAD.

ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ ΠΈ Π΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ содСрТат Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ прилоТСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ имя_Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°:Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅_Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°.

НСкоторыС ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΏΡ€ΠΈ этом ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Π΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€Π΅ ΠΈ ΠΌΠ°Π½ΠΈΡ„СстС. Если это условиС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΠΏΡƒΡΡ‚ится ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡƒΡΡ‚ановится Π½Π° ΠΏΡ€ΠΈΠ±ΠΎΡ€Π΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ.

Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π±Π΅Ρ€Π΅Ρ‚ Π½Π° ΡΠ΅Π±Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ срСдство, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (KToolbar ΠΈΠ· J2MEWTK ΠΈ Forte for Java CE). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, это срСдство прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ добавлСния ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ирования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

ΠœΠΈΠ΄Π»Π΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любого Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°:

getAppProperty (String key)

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ.

Β· MIDlet-, -описаниС n-ΠΎΠ³ΠΎ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° Π² Π½Π°Π±ΠΎΡ€Π΅. Π—Π΄Π΅ΡΡŒ name — имя ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°, icon — «ΠΈΠΊΠΎΠ½ΠΊΠ°» (Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PNG), class — Ρ„Π°ΠΉΠ» класса, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰Π΅Π³ΠΎ (extends) класс MIDlet (фактичСски Ρ‚ΠΎΡ‚ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ «ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ»). ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π½Π° ΠΏΡ€ΠΈΠ±ΠΎΡ€Π΅ Π½Π°Π±ΠΎΡ€Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ², Π½Π° ΡΠΊΡ€Π°Π½Π΅ высвСчиваСтся список ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ² Π² Π½Π΅ΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ прСдставлСны ΠΈΠΌΠ΅Π½Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ² с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠΊΠΎΠ½ΠΊΠ°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: MIDlet-1: worm,/liqWorm/worm.png, liqWorm. worm

Β· MIDlet-Version: -вСрсия Π½Π°Π±ΠΎΡ€Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ xx.yy.zz.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: MIDlet-Version: 0.1.0

Β· MIDlet-Info-URL: -URL, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°Π±ΠΎΡ€Π΅ ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: MIDlet-Info-URL: xdimas@yahoo.com

Β· MIDlet-Description: -описаниС Π½Π°Π±ΠΎΡ€Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: MIDlet-Description: My first MIDlet!

Β· MIDlet-Vendor: -информация ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: MIDlet-Vendor: xDimas

НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ способы установки Π½Π°Π±ΠΎΡ€Π° ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ² Π½Π° ΠΏΡ€ΠΈΠ±ΠΎΡ€, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΎΡ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½, Π½Π΅ ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°Π΅Ρ‚ся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… стандарта J2ME.

Для создания ΠΈ Ρ‚Сстирования ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ J2ME_wireless_toolkit с ΡΠ°ΠΉΡ‚Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°: http://java.sun.com/j2me/index.jsp

2. ΠžΡΠ½ΠΎΠ²Ρ‹ создания ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠ²

НСобходимо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ MIDP являСтся Π½Π΅ ΠΏΡ€ΠΎΡΡ‚ΠΎ ΡƒΡ€Π΅Π·Π°Π½Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ J2SE (Java2 Standard Edition). Π—Π΄Π΅ΡΡŒ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ свои особСнности, ΠΏΡ€ΠΎΠ΄ΠΈΠΊΡ‚ΠΎΠ²Π°Π½Π½Ρ‹Π΅ особСнностями устройств, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΈΠ΄Π»Π΅Ρ‚Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹.

Класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΌΠΈΠ΄Π»Π΅Ρ‚ΠΎΠΌ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ (extends) класс MIDlet (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ классу Applet ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π°ΠΏΠ»Π΅Ρ‚ΠΎΠ²). Π­Ρ‚ΠΎΡ‚ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Класс MIDlet ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для управлСния ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°. Π’Π°ΠΊ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС (Π’Πœ) ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠ΄Π»Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ (фактичСски Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄: notifyDestroyed (), Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π΅Ρ‚Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, Π’Πœ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄: destroyApp (bolean uconditional).

ΠœΠΈΠ΄Π»Π΅Ρ‚, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π°ΠΏΠ»Π΅Ρ‚Π°, ΠΌΠΎΠΆΠ΅Ρ‚ находится Π² ΡΠΎΡΡ‚оянии ΠΏΠ°ΡƒΠ·Ρ‹ (paused — Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° дисплСй занят ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сообщСниСм ΠΈ Ρ‚. ΠΏ.). Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π΅Ρ‚Ρƒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΠΎΡΡ‚ояниС ΠΏΠ°ΡƒΠ·Ρ‹, Π’Πœ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°: pauseApp (), Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΠΉΡ‚ΠΈ Π² ΡΠΎΡΡ‚ояниС ΠΏΠ°ΡƒΠ·Ρ‹, ΠΌΠΈΠ΄Π»Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄: notifyPaused ().

Когда ΠΌΠΈΠ΄Π»Π΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ состояниС (Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΠ°ΡƒΠ·Ρ‹ ΠΈ Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°), вызываСтся Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄: startApp ().

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСсколько Ρ€Π°Π· Π·Π° Π²Ρ€Π΅ΠΌΡ выполнСния ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°.

Класс, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ MIDlet ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ (implements) Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ интСрфСйсы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ интСрфСйс Runnable .

Для взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² MIDP ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ классы Display ΠΈ Displayable (Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π΅Π³ΠΎ наслСдники).

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса Display создаСтся Π’Πœ ΠΈ Π·Π° Π²ΡΠ΅ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΈΠ΄Π»Π΅Ρ‚Π° для Π½Π΅Π³ΠΎ присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого класса. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

static Display Dispaly. getDisplay (MIDlet m)

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса Display ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса Displayable. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Displayable ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ нСпосрСдствСнно для взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Ρ‚.Π΅. для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ клавиш ΠΈ Ρ‚. ΠΏ.). Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΡ‚ΠΈΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ DisplayΠ΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

void setCurrent (Displayable d)

Displayable getCurrent ()

Π‘Π°ΠΌ класс Displayable объявлСн ΠΊΠ°ΠΊ абстрактный, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°ΠΌΠΈ. Π˜Ρ… Π΄Π²Π° — это классы Canvas ΠΈ Screen.

ΠŸΠΎΡ‚ΠΎΠΌΠΊΠΈ класса Screen ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π½Π°Π±ΠΎΡ€ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для высокоуровнСго взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Ρ„ΠΎΡ€ΠΌΡ‹, поля Π²Π²ΠΎΠ΄Π°, списки ΠΈ Ρ‚. ΠΏ.). Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ этот Π½Π°Π±ΠΎΡ€ вСсьма ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚авляСт ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ (ΠΎΠ΄Π½Π°ΠΊΠΎ достаточный) возмоТностСй для взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π½Π°Π±ΠΎΡ€ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ…, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… интСрактивности (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΈΠ³Ρ€Π°Ρ…), Π½Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚авляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ, Π½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ всС ΠΆΠ΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° для Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ², мСню ΠΈ Ρ‚. ΠΏ.). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ этот Π½Π°Π±ΠΎΡ€ здСсь Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ.

Класс Canvas ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π³ΠΎ взаимодСйствия с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. Π’ Π½Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для обСспСчСния пСрСрисовки содСрТимого экрана, получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈ Ρ‚. ΠΏ. ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌΡΡ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… особСнностях использования класса Canvas.

НСобходимо ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ±ΠΎΡ€Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΌΠΈΠ΄Π»Π΅Ρ‚, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ дисплСя. Для ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

int getHeight ()

int getWidth ()

ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²ΠΊΠ° содСрТимого экрана осущСствляСтся Π’Πœ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ нСльзя. МоТно лишь ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π’Πœ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС экрана Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

void repaint ()

ΠΈΠ»ΠΈ

void repaint (int x, int y, int width, int height)

МоТно ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚ΡŒ Π’Πœ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ пСрСрисовки Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: void serviceRepaints ()

Когда Π’Πœ осущСствляСт пСрСрисовку содСрТимого экрана, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄: void paint (Graphics g)

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ g ΡΠ²ΡΠ·Π°Π½ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° ΡΠΊΡ€Π°Π½. ИспользованиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Graphics происходит Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π°ΠΏΠ»Π΅Ρ‚Π°ΠΌΠΈ.

НСобходимо Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ paint объявлСн ΠΊΠ°ΠΊ абстрактный ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Canvas Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ класс, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΉ Canvas ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ paint.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Graphics, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²ΠΊΡƒ экрана, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Π°ΠΏΠ»Π΅Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ: Graphics Applet. getGraphics (), для ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² класса MIDlet прямым способом Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. МоТно ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ paint, Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся.

MIDP прСдоставляСт элСгантный ΠΌΠ΅Ρ‚ΠΎΠ΄ для синхронизации пСрСрисовки экрана с Ρ…ΠΎΠ΄ΠΎΠΌ выполнСния основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΠΊΠ»Π°ΡΡΠ΅ Display присутствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄:

callSerially (Runnable r)

Π’Ρ‹Π·ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° заставляСт Π’Πœ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ run () ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° r ΡΡ€Π°Π·Ρƒ послС окончания пСрСрисовки экрана. Π’Ρ‹Π·ΠΎΠ² осущСствляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Canvas ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

keyPressed (int key)

keyReleased (int key)

keyRepeated (int key)

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄Ρ‹ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся. Для получСния дСйствия, связанного с Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄:

int getGameAction (int key)

Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ дСйствия (ΠΊΠΎΠ΄Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ константы Π² ΠΊΠ»Π°ΡΡΠ΅ Canvas Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ FIRE). Π•ΡΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄:

int getKeyCode (int gameAction)

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Displayable ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Command ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ‚ся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ конструктора:

Command (String command, int type, int priority)

Для добавлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΊΠ»Π°ΡΡΠ΅ Displayable прСдусмотрСны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹:

void addCommand (Command c)

void removeCommand (Command c)

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΈΡ… Ρ‚ΠΈΠΏΠ°, ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒΡΡ Π·Π° ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄ экраном Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΈΠ»ΠΈ Π·Π°Π½ΠΎΡΠΈΡ‚ΡŒΡΡ Π² ΡΠΊΡ€Π°Π½Π½ΠΎΠ΅ мСню (это дСлаСтся автоматичСски). ΠŸΡ€ΠΈ этом Π½Π°Π΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ отобраТаСтся имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ΄Π»Π΅Ρ‚ ΠΌΠΎΠ³ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ (implements) интСрфСйс CommandListener. Π£ ΡΡ‚ΠΎΠ³ΠΎ интСрфСйса Π΅ΡΡ‚ΡŒ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄: void commandAction (Command c, Displayable d), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ вызываСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ c.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса Displayable ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ listener, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ этого класса:

void addListener (CommandListener listener)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-Π·Π°Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ для нашСй ΠΈΠ³Ρ€Ρ‹, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΠ³Ρ€Ρ‹ «Ρ‡Π΅Ρ€Π²ΡΠΊ».

package example. wormgame;

import java.lang.Thread;

// ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ Π½Π°ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

import javax.microedition.lcdui.Form;

import javax.microedition.lcdui.Item;

import javax.microedition.lcdui.Gauge;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

/**

* Основной класс нашСго ΠΌΠΈΠ΄Π»Π΅Ρ‚Π°

*/

public class WormMain extends MIDlet implements CommandListener {

/** Класс ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ «Ρ‡Π΅Ρ€Π²ΡΠΊΠ°» */

private WormPit theGame;

/** Кнопка Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΈΠ³Ρ€Ρ‹. */

private Command exitCmd = new Command («Exit», Command. EXIT, 3);

/** Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ мСню, ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности. */

private Command levelCmd = new Command («Change Level», Command. SCREEN, 2);

/** Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ мСню, Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ. */

private Command startCmd = new Command («Start», Command. SCREEN, 1);

/** Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ мСню, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ. */

private Command restartCmd = new Command («Restart», Command. SCREEN, 1);

/** Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ мСню, вСрнутся Π² ΠΈΠ³Ρ€Ρƒ Π±Π΅Π· ΠΈΠ·Π²Π΅Π½Π΅Π½ΠΈΠΉ. */

private Command cancelCmd = new Command («Cancel», Command. ITEM, 1);

/** Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ мСню, для подтвСрТТдСния Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… установок. */

private Command OKCmd = new Command («OK», Command. OK, 1);

/**

* ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ графичСскиС Π²ΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ

* устанавливаСтся command listener.

*/

public WormMain () {

theGame = new WormPit ();

theGame.addCommand (exitCmd);

theGame.addCommand (levelCmd);

theGame.addCommand (startCmd);

theGame.addCommand (audioOnCmd);

theGame.setCommandListener (this);

}

/**

* ДСструктор для очистки памяти занятой ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

*/

protected void destroyApp (boolean unconditional) {

theGame.destroyGame ();

Display.getDisplay (this).setCurrent ((Displayable)null);

}

/**

* ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния

*/

protected void pauseApp () {

}

/**

* Запуск прилоТСния

*/

protected void startApp () {

Display.getDisplay (this).setCurrent (theGame);

try {

// Запуск ΠΈΠ³Ρ€Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅

Thread myThread = new Thread (theGame); // создаём Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ

myThread.start (); // запуск ΠΏΠΎΡ‚ΠΎΠΊΠ°

} catch (Error e) {

destroyApp (false);

notifyDestroyed ();

}

}

/**

* ВыполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прилоТСния Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π΄Π΅ΠΉΡΡ‚вия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

*/

public void commandAction (Command c, Displayable d) {

if (c == restartCmd) {

theGame.restart ();

} else if (c == levelCmd) {

Item[] levelItem = {

new Gauge («Level», true, 9, theGame. getLevel ())};

Form f = new Form («Change Level», levelItem);

f.addCommand (OKCmd);

f.addCommand (cancelCmd);

f.setCommandListener (this);

Display.getDisplay (this).setCurrent (f);

} else if (c == exitCmd) {

destroyApp (false);

notifyDestroyed ();

} else if (c == startCmd) {

theGame.removeCommand (startCmd);

theGame.addCommand (restartCmd);

theGame.restart ();

} else if (c == OKCmd) {

Form f = (Form)d;

Gauge g = (Gauge)f.get (0);

theGame.setLevel (g.getValue ());

Display.getDisplay (this).setCurrent (theGame);

} else if (c == cancelCmd) {

Display.getDisplay (this).setCurrent (theGame);

}

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ мСню ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ графичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° ΡΠΊΡ€Π°Π½Π΅ мобильного устройства.

public class WormPit extends Canvas implements Runnable {

/** ΠžΡ‡ΠΊΠΈ Π² ΠΈΠ³Ρ€Π΅. */

private int score = 0;

/** Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ слоТности. */

private int level = 5;

/** Π¨ΠΈΡ€ΠΈΠ½Π° экрана Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…. */

static int CellWidth;

/** Π”Π»ΠΈΠ½Π° экрана Π² ΠΏΠΈΠΊΡΠ΅Π»ΡΡ…. */

static int CellHeight;

/** Высота ΡˆΡ€ΠΈΡ„Ρ‚Π° для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½ счёта. */

private static final int SCORE_CHAR_HEIGHT;

/** Π¨ΠΈΡ€ΠΈΠ½Π° ΡˆΡ€ΠΈΡ„Ρ‚Π° для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½ счёта. */

private static final int SCORE_CHAR_WIDTH;

/** ВрСмя ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ пСрСрисовкой чСрвя (400 milliseconds) */

private static final int DEFAULT_WAIT = 400;

/** Π¦Π²Π΅Ρ‚ ΡˆΡ€ΠΈΡ„Ρ‚Π°. (0xff0000) */

static final int TEXT_COLOUR = 0×00ff0000;

/** Π Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ чСрвя. */

public static final int CELL_SIZE = 5;

// Установка Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡˆΡ€ΠΈΡ„Ρ‚Π°

static {

Font defaultFont = Font. getDefaultFont (); // Π²Π·ΡΡ‚ΡŒ ΡˆΡ€ΠΈΡ„Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

SCORE_CHAR_WIDTH = defaultFont. charWidth ('S');

SCORE_CHAR_HEIGHT = defaultFont. getHeight ();

SCORE_HEIGHT = SCORE_CHAR_HEIGHT * 2;

}

/**

* ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€. Задания ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΈ Π²Ρ‹ΡΠΎΡ‚Ρ‹ чСрвя.

*/

public WormPit () {

width = round (getWidth ());

height = round (getHeight ()-SCORE_HEIGHT);

WormPit.CellWidth = (width-(START_POS*2)) / WormPit. CELL_SIZE;

WormPit.CellHeight = (height-(START_POS*2)) / WormPit. CELL_SIZE;

myWorm = new Worm (this);

/**

* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий ΠΎΡ‚ Π½Π°ΠΆΠ°Ρ‚ия клавишь Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌ устройствС.

* Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈ (дТойстик) Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌ устройствС (UP, DOWN, LEFT, RIGHT)

*/

public void keyPressed (int keyCode) {

switch (getGameAction (keyCode)) {

case Canvas. UP:

myWorm.setDirection (Worm.UP);

break;

case Canvas. DOWN:

myWorm.setDirection (Worm.DOWN);

break;

case Canvas. LEFT:

myWorm.setDirection (Worm.LEFT);

break;

case Canvas. RIGHT:

myWorm.setDirection (Worm.RIGHT);

break;

case 0:

// ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ клавиши с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ 2,4,6,8

switch (keyCode) {

case Canvas. KEY_NUM2:

myWorm.setDirection (Worm.UP);

break;

case Canvas. KEY_NUM8:

myWorm.setDirection (Worm.DOWN);

break;

case Canvas. KEY_NUM4:

myWorm.setDirection (Worm.LEFT);

break;

case Canvas. KEY_NUM6:

myWorm.setDirection (Worm.RIGHT);

break;

}

break;

}

}

/**

* ΠŸΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²ΠΊΠ° экрана ΠΈ Π²ΡΠ΅Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

*/

private void paintPitContents (Graphics g) {

try g. LEFT);

catch (WormException se) {

gameOver = true;

}

}

/**

* Π’Ρ‹Π²ΠΎΠ΄ Π½Π° ΡΠΊΡ€Π°Π½ всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

*/

public void paint (Graphics g) {

if (forceRedraw) g. LEFT);

g.drawString («» + score,

(width — (SCORE_CHAR_WIDTH * 3)),

height, g. TOP else {

// ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ чСрвя ΠΈ Π΅Π΄Ρƒ

g.translate (START_POS, START_POS);

}

/**

* Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ пСрСрисовку экрана ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ ΡΡŠΡ‘ΠΌΠ΅ ΠΏΠ°ΡƒΠ·Ρ‹

*/

protected void hideNotify () {

super.hideNotify ();

forceRedraw = true;

if (!gameOver) {

gamePaused = true;

}

}

/**

* Основной Ρ†ΠΈΠΊΠ» выполнСния MIDP прилоТСния

*/

public void run () {

while (!gameDestroyed) {

try {

synchronized (myWorm) {

/* Π»ΠΎΠ³ΠΈΠΊΠ° вычислСний ΠΎΡ‡ΠΊΠΎΠ² двидСния чСрвя ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ*/

repaint ();

}

}

} catch (java.lang.InterruptedException ie) {

}

}

}

/**

* Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ событиС уничтоТСния прилоТСния

*/

public void destroyGame () {

synchronized (myWorm) {

gameDestroyed = true;

//myWorm.notifyAll ();

myWorm.notifyAll ();

}

}

}

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Для выполнСния задания Π½ΠΎΠΌΠ΅Ρ€ 2 потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ TCP соСдинСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сокСтов ΠΈ Ρ„ΠΎΡ€ΠΌΡƒ Π²Π²ΠΎΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Для Π½Π°Ρ‡Π°Π»Π° создадим MIDP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

/**

* Основной класс MIDP прилоТСния

*/

public class SocketMIDlet extends MIDlet implements CommandListener {

private final static String SERVER = «Server» ;

private final static String CLIENT = «Client» ;

private static String[] names = {SERVER, CLIENT};

private static Display display; // дисплСй

private Form f; // Ρ„ΠΎΡ€ΠΌΠ°

private ChoiceGroup cg;

private boolean isPaused;

private Server server;

private Client client;

// лСвая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌ устройствС

private Command exitCommand = new Command («Exit», Command. EXIT, 1);

// правая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½ΠΎΠΌ устройствС

private Command startCommand = new Command («Start», Command. ITEM, 1);

/**

* ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€. создаёт графичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° ΡΠΊΡ€Π°Π½Π΅.

* И ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий.

*/

public SocketMIDlet () {

display = Display. getDisplay (this);

f = new Form («Socket Demo»);

cg = new ChoiceGroup («Please select peer» ,

Choice.EXCLUSIVE, names, null);

f.append (cg);

f.addCommand (exitCommand);

f.addCommand (startCommand);

f.setCommandListener (this);

display.setCurrent (f);

}

public boolean isPaused () {

return isPaused;

}

/**

* Запуск прилоТСния

*/

public void startApp () {

isPaused = false;

}

/**

* ΠŸΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° прилоТСния

*/

public void pauseApp () {

isPaused = true;

}

/**

* ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° прилоТСния

*/

public void destroyApp (boolean unconditional) {

if (server ≠ null) {

server.stop ();

}

if (client ≠ null) {

client.stop ();

}

}

/**

* ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ событий.

*/

public void commandAction (Command c, Displayable s) {

if (c == exitCommand) {

destroyApp (true);

notifyDestroyed ();

} else if (c == startCommand) {

String name = cg. getString (cg.getSelectedIndex ());

if (name.equals (SERVER)) {

server = new Server (this);

server.start ();

} else {

client = new Client (this);

client.start ();

}

}

}

}

Для создания соСдинСния с ΡΠ΅Ρ€Π²Π΅Ρ€ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сокСтов потрСбуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конструкция:

// Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ сокСт соСдинСниС Π½Π° 5000 ΠΏΠΎΡ€Ρ‚Ρƒ с localhost

SocketConnection sc = (SocketConnection) Connector. open («socket://localhost:5000»);

// Π’Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для записи ΠΎΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΡΠΎΠΊΠ΅Ρ‚

InputStream is = sc. openInputStream ();

// Π’Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ для чтСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· ΡΠΎΠΊΠ΅Ρ‚Π°

OutputStream os = sc. openOutputStream ();

Для открытия соСдинСния для оТидания соСдинСния потрСбуСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ конструкция:

// Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ сокСт Π½Π° 5000 ΠΏΠΎΡ€Ρ‚Ρƒ

ServerSocketConnection scn = (ServerSocketConnection) Connector. open («socket://:5000»);

// ΠžΠΆΠΈΠ΄Π°Ρ‚ΡŒ соСдинСния ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… машин

SocketConnection sc = (SocketConnection) scn. acceptAndOpen ();

Π›ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°.

1. КСн ΠΡ€Π½ΠΎΠ»ΡŒΠ΄, ДТСймс Гослинг, Дэвид Π₯олмс. Π―Π·Ρ‹ΠΊ программирования Java™.

2. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт Java — http://java.sun.com/ (Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π» Π½Π° Ρ€ΡƒΡΡΠΊΠΎΠΌ языкС с ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠΌ).

3. Java™ 2 SDK, Micro Edition Documentation — http://java.sun.com/products/midp/index.jsp

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ