| <!doctype html> |
| <html class="no-js" lang="en" dir="ltr"> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="x-ua-compatible" content="ie=edge"> |
| <title>Preparing to Create the Feed Reader Application</title> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <meta name="description" content="Preparing to Create the Feed Reader Application - Apache NetBeans"> |
| <meta name="author" content="Apache NetBeans"> |
| <meta name="description" content="Preparing to Create the Feed Reader Application - Apache NetBeans"> |
| <meta name="keywords" content="Apache NetBeans Platform, Platform Tutorials, Preparing to Create the Feed Reader Application"> |
| <meta name="generator" content="Apache NetBeans"> |
| <link rel="stylesheet" href="../../../../_/css/font-awesome.min.css"> |
| <link rel="alternate" type="application/atom+xml" title="Apache NetBeans Blog" href="https://netbeans.apache.org/blogs/atom" /> |
| <link rel="stylesheet" href="../../../../_/css/highlightjs/default.min.css"> |
| <link rel="stylesheet" href="../../../../_/css/netbeans.css"> |
| <link rel="apple-touch-icon" sizes="180x180" href="../../../../_/images/fav/apple-touch-icon.png"> |
| <link rel="icon" type="image/png" sizes="32x32" href="../../../../_/images/fav/favicon-32x32.png"> |
| <link rel="icon" type="image/png" sizes="16x16" href="../../../../_/images/fav/favicon-16x16.png"> |
| <link rel="manifest" href="../../../../_/images/fav/site.webmanifest"> |
| <link rel="mask-icon" href="../../../../_/images/fav/safari-pinned-tab.svg" color="#5bbad5"> |
| <meta name="msapplication-TileColor" content="#ffc40d"> |
| <meta name="theme-color" content="#ffffff"> |
| <link href="../../../../_/css/font-open-sans.css" rel="stylesheet"> |
| <!-- |
| 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. |
| --> |
| </head> |
| <body> |
| <div class="title-bar" data-responsive-toggle="responsive-menu" data-hide-for="medium"> |
| <button type="button" data-toggle="responsive-menu"><i style='font-size: 32px; color: #fff; padding: 8px' class='fa fa-bars'></i></button> |
| <div class="title-bar-title">Apache NetBeans</div> |
| </div> |
| <div class="top-bar" id="responsive-menu"> |
| <div class='top-bar-left'> |
| <a class='title' href="../../../../index.html"><img src='../../../../_/images/apache-netbeans.svg' style='padding: 8px; height: 48px;'> Apache NetBeans</a> |
| </div> |
| <div class="top-bar-right"> |
| <ul class="vertical medium-horizontal menu" data-responsive-menu="drilldown medium-dropdown"> |
| <li> <input id="search-input" type="text" placeholder="Search the docs"> </li> |
| <li> <a href="../../../../front/main/community">Community</a> </li> |
| <li> <a href="../../../../front/main/participate">Participate</a> </li> |
| <li> <a href="../../../../front/main/blogs">Blog</a></li> |
| <li> <a href="../../../../front/main/help">Get Help</a> </li> |
| <li> <a href="https://plugins.netbeans.apache.org/">Plugins</a> </li> |
| <li> <a href="../../../../front/main/download">Download</a> </li> |
| </ul> |
| </div> |
| </div> |
| |
| <!-- src/templates/news --> |
| <section class="hero news alternate"> |
| <div class='grid-container'> |
| <div class='cell'> |
| <div class="annotation">Latest release</div> |
| <h1>Apache NetBeans 27</h1> |
| <p><a class="button success" href="../../../../front/main/download/nb27">Download</a></p> |
| </div> |
| </div> |
| </section> |
| <div class='grid-container main-content tutorial'> |
| <h1 class="sect0">Preparing to Create the Feed Reader Application</h1> |
| <div class="sectionbody"> |
| <div class="admonitionblock note"> |
| <table> |
| <tbody><tr> |
| <td class="icon"><i class="fa icon-note" title="Note"></i></td> |
| <td class="content">This tutorial needs a review. |
| You can <a href="https://github.com/apache/netbeans-antora-tutorials/edit/main/modules/ROOT/pages/tutorials/nbm-feedreader_background.adoc" title="Edit this tutorial in github">edit it in GitHub </a> |
| following these <a href="../../../../tutorial/main/kb/docs/contributing">contribution guidelines.</a></td> |
| </tr></tbody> |
| </table> |
| </div> |
| </div> |
| <div id="toc" class="toc"> |
| <div id="toctitle"></div> |
| <ul class="sectlevel1"> |
| <li><a href="#_table_of_contents">Table of Contents</a></li> |
| <li><a href="#a15328">About Frequently Used Terms</a></li> |
| <li><a href="#a95124">About the Feed Reader Application</a></li> |
| <li><a href="#a73148">About this Tutorial</a></li> |
| <li><a href="#a75087">Playing with the Application</a> |
| <ul class="sectlevel2"> |
| <li><a href="#a77950">Installing the Application</a></li> |
| <li><a href="#a88314">Introducing the Application</a></li> |
| <li><a href="#a85058">Introducing the Sources</a></li> |
| </ul> |
| </li> |
| </ul> |
| </div> |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Before beginning to code the FeedReader application, it’s a good idea to familiarize yourself with some of the frequently used terms in the area of application development in NetBeans IDE. In the process, you will build a general understanding of the application that you will create, find out about what you are about to learn, and set up everything that you are going to need.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="_table_of_contents"><a class="anchor" href="#_table_of_contents"></a>Table of Contents</h2> |
| <div class="sectionbody"> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><a href="#a15328">About Frequently Used Terms</a></p> |
| </li> |
| <li> |
| <p><a href="#a95124">About the Feed Reader Application</a></p> |
| </li> |
| <li> |
| <p><a href="#a73148">About this Tutorial</a></p> |
| </li> |
| <li> |
| <p><a href="#a75087">Playing with the Application</a></p> |
| </li> |
| <li> |
| <p><a href="#a77950">Installing the Application</a></p> |
| </li> |
| <li> |
| <p><a href="#a88314">Introducing the Application</a></p> |
| </li> |
| <li> |
| <p><a href="#a85058">Introducing the Sources</a></p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="a15328"><a class="anchor" href="#a15328"></a>About Frequently Used Terms</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>This tutorial assumes that you have a basic conceptual understanding of the infrastructure that is built right into NetBeans. There is less to understand than you might think. Common terms to be familiar with are as follows:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>* NetBeans Platform.* The application framework that provides everything most desktop applications need and nothing superfluous. The NetBeans Platform provides an application’s common requirements, such as standard menus, toolbars, document management, and settings, right out-of-the-box. Building an application "on top of NetBeans" means that, instead of writing applications from scratch, you only provide the parts of your application that the NetBeans Platform does not already have. And you exclude the parts of the NetBeans Platform that you do not need. At the end of the development cycle, you bundle your application with the NetBeans Platform, but with your own executable and splash screen. Doing so saves you a lot of time and energy and results in a solid, reliable application.</p> |
| </li> |
| <li> |
| <p>* System Filesystem.* The general registry that contains NetBeans configuration information, built from the <code> layer.xml</code> configuration files of the registered modules. NetBeans stores a wide variety of configuration information in the System Filesystem. For example, the System Filesystem contains a folder called <code> Menu</code> , which contains subfolders with names such as <code> File</code> and <code> Edit</code> . These subfolders contain files that represent Java classes which implement the actions that appear in the "File" and "Edit" menus in the IDE.</p> |
| </li> |
| <li> |
| <p>* Module.* A group of Java classes that provides an application with a specific feature. For example, the feature provided by the Java classes in the plug-in module that you build in this tutorial is an RSS/Atom feed reader. The Java classes use the <code> manifest.mf</code> file to declare the module and the <code> layer.xml</code> configuration file to register their functionality in the System Filesystem.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>As an aside: in NetBeans terminology, "plug-in" is an adjective while "module" is a noun. There is no semantic difference between them.</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>* NetBeans APIs.* The public interfaces and classes which are available to module writers and application writers. They are divided into specific APIs for dealing with different types of functionality. The contents and behavior of the Java source packages and their subpackages, as specified in the API reference documentation, are the APIs. For the full NetBeans API List, click <a href="https://bits.netbeans.org/dev/javadoc/">here</a> .</p> |
| </li> |
| <li> |
| <p>* Module Suite.* A group of interdependent modules that are deployed together. The IDE helps you to brand the suite — for example, you can add a splash screen and you can specify the parts of the NetBeans Platform that you don’t want your application to provide.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="a95124"><a class="anchor" href="#a95124"></a>About the Feed Reader Application</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>While writing the Feed Reader Application, you will leverage a lot of the NetBeans infrastructure. The first piece you leverage is the System Filesystem. As pointed out earlier, the System Filesystem consists of configuration data: it is built from the configuration files (each of which is stored on disk as <code> layer.xml</code> files) of all the modules in the system, which it writes into the user’s settings directory.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The System Filesystem uses the same infrastructure for recognizing files that is used for recognizing a user’s files on disk. That means you can show a view of a folder inside the configuration data of the IDE just as easily as you can show a folder on disk. This way you can use all of the plumbing that is built into NetBeans for viewing files and showing trees and so forth. In fact, many views you see in the IDE use the same technique. For example, the Favorites window is a view of a folder in the System Filesystem, which contains links to files on disk. The contents of the Runtime window are also a view of a folder in the System Filesystem, which is why plug-in modules are able to add nodes to it. Since it uses the same mechanisms as are used for recognizing files on disk, the objects inside a folder can have whatever icons and display names you choose to give them.</p> |
| </div> |
| <div class="paragraph"> |
| <p>The other piece you use is the <a href="https://bits.netbeans.org/dev/javadoc/org-openide-nodes/overview-summary.html">Nodes API</a> . The Nodes API is a generalization of TreeNode, though Nodes can be displayed in a variety of viewer components, not just trees. Nodes typically represent DataObjects. A DataObject is basically a parsed file, in other words, a Java object that knows the meaning of what is in a file or what the file represents and can do something with it. Nodes add features to DataObjects that the user interacts with, such as actions, localized display names, and icons.</p> |
| </div> |
| <div class="paragraph"> |
| <p>So, after using wizards to generate some basic templates, you will use the <code> layer.xml</code> file to create a folder in the System Filesystem for RSS feed objects ( <a href="#34280">Creating the RssFeeds Folder</a> ). Next, you will provide a view of the folder, similar to the IDE’s Projects window or Files window, by building on top of one of the generated files ( <a href="#22179">Extending the Feed Window</a> ). The view is rooted in your folder for RSS feed objects. Then you get the DataObject representing that folder, and its Node. You will wrap that node in a FilterNode ( <a href="#34280">Creating the RssFeeds Folder</a> ). A FilterNode is a node that can act as a wrapper for another node; by default it behaves exactly as the other node does, but you can override methods on it to change things, so that you can give it your own icon, display name and actions. Then you wrap each of the node’s children as well, doing the same thing for them as for the node.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Next, you will create an Add Feed action on the root node. When the user adds an RSS feed, you do something very simple: you create a new Feed object (really just an object that contains the URL, <a href="#62391">Creating the Feed Object</a> ) and then serialize that Feed object as a file in your RSSFeeds folder. Since you’re using NetBeans built-in infrastructure for visualizing files (because you’re just getting the standard node for the folder, which can notice when files are added or removed), in a split second the node for the newly added feed will appear in the user interface. Using the System Filesystem this way means that the amount of code you have to write to save the list of RSS feeds on exit is…​ none at all! You save a feed when the user creates it, and that data is persisted to disk automatically. So, basically, you are just dropping Feed POJOs into a folder, and you happen to be showing a view of that folder. The system takes care of virtually everything else.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="a73148"><a class="anchor" href="#a73148"></a>About this Tutorial</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>This tutorial intends to teach you the following:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Creating an application on top of the NetBeans Platform, using wizards and other facilities provided by NetBeans IDE 6.0.</p> |
| </li> |
| <li> |
| <p>Creating a skeleton windowing component and a skeleton menu item, using wizards in NetBeans IDE 6.0.</p> |
| </li> |
| <li> |
| <p>Using the NetBeans <a href="https://bits.netbeans.org/dev/javadoc/org-openide-nodes/overview-summary.html">Nodes API</a> to create nodes for feeds and feed entries.</p> |
| </li> |
| <li> |
| <p>Registering the application in the NetBeans System Filesystem.</p> |
| </li> |
| <li> |
| <p>Branding the application with items such as your own splash screen and titlebar.</p> |
| </li> |
| <li> |
| <p>Providing a distribution of the application.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="a75087"><a class="anchor" href="#a75087"></a>Playing with the Application</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Before you start writing the application, you might want to acquaint yourself with the final product. Fortunately, the Feed Reader Application is an official NetBeans sample, bundled with the IDE, and waiting for you to pull it from the New Project wizard.</p> |
| </div> |
| <div class="sect2"> |
| <h3 id="a77950"><a class="anchor" href="#a77950"></a>Installing the Application</h3> |
| <div class="paragraph"> |
| <p>Take the following steps to install the sample:</p> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="1"> |
| <li> |
| <p>Start the IDE.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="2"> |
| <li> |
| <p>Choose File > New Project (Ctrl-Shift-N), then expand Samples, then select NetBeans Modules, and choose FeedReader. Click Next.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="3"> |
| <li> |
| <p>Name the project whatever you like, choose a location to store your project, and click Finish. The IDE opens the FeedReader sample.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="4"> |
| <li> |
| <p>Right-click the <code> Feed Reader Application </code> project node and choose Run Project. The application starts up. During installation, notice that a splash screen is displayed.</p> |
| </li> |
| </ol> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="a88314"><a class="anchor" href="#a88314"></a>Introducing the Application</h3> |
| <div class="paragraph"> |
| <p>The Feed Reader Application displays the RSS/Atom Feeds window, containing a node called RSS/Atom Feeds.</p> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="1"> |
| <li> |
| <p>Right-click RSS/Atom Feeds node, choose Add, and enter a URL to an RSS/Atom feed. For example:</p> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>NetBeans.org RSS feed, which is <code> <a href="https://netbeans.org/rss-091.xml" class="bare">https://netbeans.org/rss-091.xml</a></code></p> |
| </li> |
| <li> |
| <p>PlanetNetBeans RSS feed, which is <code> <a href="http://www.planetnetbeans.org/rss20.xml" class="bare">http://www.planetnetbeans.org/rss20.xml</a></code></p> |
| </li> |
| </ul> |
| </div> |
| </li> |
| </ol> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="2"> |
| <li> |
| <p>Click OK. A node is added for the feed; its children are the feed entries. Normally, feed entries are articles or topics that the feed makes available.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="3"> |
| <li> |
| <p>Repeat the process and add more feeds.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="olist arabic"> |
| <ol class="arabic" start="4"> |
| <li> |
| <p>Double-click a feed entry to open it in the IDE’s default browser.</p> |
| </li> |
| </ol> |
| </div> |
| <div class="paragraph"> |
| <p>Other functionality provided by the rich-client application:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Right-click a node and choose Add Folder to create a new folder, which you can use to organize your feeds.</p> |
| </li> |
| <li> |
| <p>Right-click a feed and choose Delete to remove a feed.</p> |
| </li> |
| <li> |
| <p>Right-click a feed entry and choose Open to open it in the editor pane.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <div class="sect2"> |
| <h3 id="a85058"><a class="anchor" href="#a85058"></a>Introducing the Sources</h3> |
| <div class="paragraph"> |
| <p>The FeedReader sample consists of main files (Java classes) and supporting files.</p> |
| </div> |
| <div class="paragraph"> |
| <p>Main files:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code> Feed.java</code> Encapsulates a URL and its associated Rome feed.</p> |
| </li> |
| <li> |
| <p><code> FeedAction.java</code> Defines the action that appears in the Window menu with the label Open Feed Window. It opens the Feed Window.</p> |
| </li> |
| <li> |
| <p><code> FeedTopComponent.java</code> Defines the action that appears in the Window menu with the label Open Feed Window. It opens the Feed Window.</p> |
| </li> |
| <li> |
| <p><code> RssNode.java</code> Node class for the RSS feeds folder and its children. Note that mainly you proxy the actual DataNode/DataFolder for the RssFeeds folder in the System Filesystem. This gives you a lot of functionality for free, like the ability to delete, listening for changes, etc. So when you add a new RSS feed, all you do is create a new Feed object and serialize it into that folder.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>Supporting files:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code> build.xml</code> Provides Ant targets for common tasks, such as building and running the application.</p> |
| </li> |
| <li> |
| <p><code> Bundle.properties</code> Localization key-value pairs.</p> |
| </li> |
| <li> |
| <p><code> FeedTopComponentSettings.xml</code> Specifies all the interfaces of the Feed Reader Application.</p> |
| </li> |
| <li> |
| <p><code> FeedTopComponentWstcref.xml</code> Specifies a reference to the component.</p> |
| </li> |
| <li> |
| <p><code> layer.xml</code> Registers folders and files in the System Filesystem. You will be shown how to use the System Filesystem Browser to work with this file.</p> |
| </li> |
| <li> |
| <p><code> project.xml</code> Declares project metadata, such as module dependencies. You will be shown how to use the Project Properties dialog box to work with this file.</p> |
| </li> |
| <li> |
| <p><code> rss16.gif</code> Icon displayed by the application’s menu item and in its Help > About dialog box.</p> |
| </li> |
| <li> |
| <p><code> splash.gif</code> Splash screen.</p> |
| </li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </div> |
| <section class='tools'> |
| <ul class="menu align-center"> |
| <li><a title="Facebook" href="https://www.facebook.com/NetBeans"><i class="fa fa-md fa-facebook"></i></a></li> |
| <li><a title="Twitter" href="https://twitter.com/netbeans"><i class="fa fa-md fa-twitter"></i></a></li> |
| <li><a title="Github" href="https://github.com/apache/netbeans"><i class="fa fa-md fa-github"></i></a></li> |
| <li><a title="YouTube" href="https://www.youtube.com/user/netbeansvideos"><i class="fa fa-md fa-youtube"></i></a></li> |
| <li><a title="Atom Feed" href="https://netbeans.apache.org/blogs/atom"><i class="fa fa-mf fa-rss"></i></a></li> |
| <li><a title="Slack" href="https://tinyurl.com/netbeans-slack-signup/"><i class="fa fa-md fa-slack"></i></a></li> |
| <li><a title="Issues" href="https://github.com/apache/netbeans/issues"><i class="fa fa-mf fa-bug"></i></a></li> |
| </ul> |
| <ul class="menu align-center"> |
| <li><a href="https://github.com/apache/netbeans-antora-tutorials/edit/main/modules/ROOT/pages/tutorials/nbm-feedreader_background.adoc" title="See this page in github"><i class="fa fa-md fa-edit"></i> See this page in GitHub.</a></li> |
| </ul> |
| </section> |
| </div> |
| <div class='grid-container incubator-area' style='margin-top: 64px'> |
| <div class='grid-x grid-padding-x'> |
| <div class='large-auto cell text-center'> |
| <a href="https://www.apache.org/"> |
| <img style="height: 60px" title="Apache Software Foundation" src="../../../../_/images/asf_logo_wide.svg" /> |
| </a> |
| </div> |
| <div class='large-auto cell text-center'> |
| <a href="https://www.apache.org/events/current-event.html"> |
| <img style="width:234px; height: 60px;" title="Apache Software Foundation current event" src="https://www.apache.org/events/current-event-234x60.png"/> |
| </a> |
| </div> |
| </div> |
| </div> |
| <footer> |
| <div class="grid-container"> |
| <div class="grid-x grid-padding-x"> |
| <div class="large-auto cell"> |
| <h1><a href="../../../../front/main/about">About</a></h1> |
| <ul> |
| <li><a href="../../../../front/main/community/who">Who's Who</a></li> |
| <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li> |
| <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> |
| <li><a href="https://www.apache.org/security/">Security</a></li> |
| </ul> |
| </div> |
| <div class="large-auto cell"> |
| <h1><a href="../../../../front/main/community">Community</a></h1> |
| <ul> |
| <li><a href="../../../../front/main/community/mailing-lists">Mailing lists</a></li> |
| <li><a href="../../../../front/main/community/committer">Becoming a committer</a></li> |
| <li><a href="../../../../front/main/community/events">NetBeans Events</a></li> |
| <li><a href="https://www.apache.org/events/current-event.html">Apache Events</a></li> |
| </ul> |
| </div> |
| <div class="large-auto cell"> |
| <h1><a href="../../../../front/main/participate">Participate</a></h1> |
| <ul> |
| <li><a href="../../../../front/main/participate/submit-pr">Submitting Pull Requests</a></li> |
| <li><a href="../../../../front/main/participate/report-issue">Reporting Issues</a></li> |
| <li><a href="../../../../front/main/participate/#documentation">Improving the documentation</a></li> |
| </ul> |
| </div> |
| <div class="large-auto cell"> |
| <h1><a href="../../../../front/main/help">Get Help</a></h1> |
| <ul> |
| <li><a href="../../../../front/main/help/#documentation">Documentation</a></li> |
| <li><a href="../../../../wiki/main/wiki">Wiki</a></li> |
| <li><a href="../../../../front/main/help/#support">Community Support</a></li> |
| <li><a href="../../../../front/main/help/commercial-support">Commercial Support</a></li> |
| </ul> |
| </div> |
| <div class="large-auto cell"> |
| <h1><a href="../../../../front/main/download">Download</a></h1> |
| <ul> |
| <li><a href="../../../../front/main/download">Releases</a></li> |
| <li><a href="https://plugins.netbeans.apache.org/">Plugins</a></li> |
| <li><a href="../../../../front/main/download/#_daily_builds_and_building_from_source">Building from source</a></li> |
| <li><a href="../../../../front/main/download/#_older_releases">Previous releases</a></li> |
| </ul> |
| </div> |
| </div> |
| </div> |
| </footer> |
| <div class='footer-disclaimer'> |
| <div class="footer-disclaimer-content"> |
| <p>Copyright © 2017-2025 <a href="https://www.apache.org">The Apache Software Foundation</a>.</p> |
| <p>Licensed under the Apache <a href="https://www.apache.org/licenses/">license</a>, version 2.0</p> |
| <div style='max-width: 40em; margin: 0 auto'> |
| <p>Apache, Apache NetBeans, NetBeans, the Apache feather logo and the Apache NetBeans logo are trademarks of <a href="https://www.apache.org">The Apache Software Foundation</a>.</p> |
| <p>Oracle and Java are registered trademarks of Oracle and/or its affiliates.</p> |
| <p>The Apache NetBeans website conforms to the <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Apache Software Foundation Privacy Policy</a></p> |
| </div> |
| </div> |
| </div> |
| |
| |
| <script src="../../../../_/js/vendor/lunr.js"></script> |
| <script src="../../../../_/js/search-ui.js" id="search-ui-script" data-site-root-path="../../../.." data-snippet-length="100" data-stylesheet="../../../../_/css/search.css"></script> |
| <script async src="../../../../search-index.js"></script> |
| <script src="../../../../_/js/vendor/jquery.min.js"></script> |
| <script src="../../../../_/js/vendor/what-input.min.js"></script> |
| <script src="../../../../_/js/vendor/foundation.min.js"></script> |
| <script src="../../../../_/js/vendor/jquery.colorbox-min.js"></script> |
| <script src="../../../../_/js/netbeans.js"></script> |
| <script> |
| $(function(){ $(document).foundation(); }); |
| </script> |
| <script src="../../../../_/js/vendor/highlight.min.js"></script> |
| <script> |
| document.addEventListener('DOMContentLoaded', (event) => { |
| document.querySelectorAll('pre code').forEach((el) => { |
| hljs.highlightElement(el); |
| }); |
| }); |
| </script> |
| </body> |
| </html> |