// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Видео о поддержке NetBeans IDE для Java ME 8
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Видео о поддержке NetBeans IDE для Java ME 8 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Видео о поддержке NetBeans IDE для Java ME 8

|===
|В этой экранной демонстрации рассматривается поддержка NetBeans IDE для Oracle Java ME SDK 8 в ОС Windows. В этом видео:

* активация поддержки Java ME в NetBeans IDE (временная метка - 1:17);
* регистрация Java ME 8 SDK в NetBeans IDE (временная метка - 2:04);
* создание проекта встраиваемого приложения Java ME 8 (временная метка - 3:06);
* персональная настройка проекта встраиваемого приложения Java ME 8 (временная метка - 4:01);
* запуск проекта встраиваемого приложения Java ME 8 (временная метка - 5:58);

Авторы: Роман Свитанич (Roman Svitanic), Алёна Сташкова (Alyona Stashkova)
Время: 6:38

link:http://bits.netbeans.org/media/nb_me_8.mp4[+Смотреть видео полностью/Загрузить+] (.mp4) (Ctrl-Click для загрузки, 12,2 МБ)

*Примечание.* Для этого видео доступны кодированные субтитры. Чтобы включить кодированные субтитры, нажмите кнопку CC в нижней части экрана проигрывателя.

link:/about/contact_form.html?to=6&subject=Feedback:%20Screencast%20-%20NetBeans%20IDE%20Support%20for%20Java%20ME%208%20EA[+Мы ждем ваших отзывов+]
 |  |  |  
|===


== Связанные ссылки

* link:http://wiki.netbeans.org/JavaMEEmbeddedHowTo[+Инструкции по Java ME Embedded+]
* link:http://docs.oracle.com/javame/embedded/embedded.html[+Документация по Oracle Java ME для встраиваемых устройств+]
* link:http://www.oracle.com/technetwork/java/embedded/documentation/me-e-otn-faq-1852008.pdf[+Обзор продукта и часто задаваемые вопросы об Oracle Java ME Embedded+]
* link:http://wiki.netbeans.org/JavaMESDKSupport[+Часто задаваемые вопросы о поддержке Java ME SDK в IDE NetBeans+]
* link:https://netbeans.org/kb/trails/mobility.html[+Технологическая карта по приложениям Java ME и Java Card+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG1552[+Разработка приложений Java ME+] в документе _Разработка приложений в IDE NetBeans_
* link:http://www.oracle.com/technetwork/java/javame/javamobile/download/overview/index.html[+Загрузка Java для мобильных устройств+]
