// 
//     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 7.4でのJDK 8サポートのビデオ
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: NetBeans IDE 7.4でのJDK 8サポートのビデオ - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, NetBeans IDE 7.4でのJDK 8サポートのビデオ

|===
|このスクリーンキャストでは、NetBeans IDEでのJDK 8の起動方法と、JDK 8プロファイルおよびラムダ式の使用方法を示します。

link:http://bits.netbeans.org/media/jdk8-gettingstarted.mp4[+ダウンロード/フルサイズを視聴+] (30MB)

 

|
link:/about/contact_form.html?to=3&subject=Feedback: Getting Started with JDK 8 Support in NetBeans IDE 7.4[+このチュートリアルに関するご意見をお寄せください+] 
|===


== 関連リンク

* link:http://openjdk.java.net/projects/jdk8/[+JDK 8プロジェクト・ページ+]
* link:https://netbeans.org/kb/docs/java/javase-jdk8.html[+NetBeans IDEでのJDK 8サポートの概要+]
* link:https://netbeans.org/features/java/index.html[+NetBeans機能のページ: Java+]
* link:https://netbeans.org/kb/trails/java-se.html[+一般的なJava開発NetBeansの学習+]
* link:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html[+Javaチュートリアル: ラムダ式+]
* link:http://apex.oracle.com/pls/apex/f?p=44785:24:114639602012411::::P24_CONTENT_ID,P24_PREV_PAGE:7919,24[+Oracle Learning Library: Java SE 8ラムダ・シリーズ+]
