// 
//     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.
//

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

|===
|В этой экранной демонстрации описывается поддержка новых функций языковой поддержки в IDE NetBeans. В этой экранной демонстрации показано, как регистрировать JDK 7 в среде IDE, настраивать проект для использования JDK 7, а также как среда IDE обрабатывает новые конструкции языка. В этой экранной демонстрации описывается использование IDE NetBeans для написания кода, совместимого со спецификацией языка JDK 7.

Автор: Алёна Сташкова (Alyona Stashkova) 
Продолжительность: 6:11

link:http://bits.netbeans.org/media/jdk7-nb70.swf[+Смотреть полностью/Загрузить+] (.swf) (Чтобы загрузить видео, нажмите клавишу Ctrl; размер – 6,5 МБ)


link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20JDK%207%20Support%20in%20NetBeans%20IDE%207%20.%200[+Отправить отзыв по этому учебному курсу+]
 
|===


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

* link:javase-jdk7.html[+Обзор поддержки JDK 7 в IDE NetBeans+]
