<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>NetBeans IDE 5.5 Installation Instructions</title>
        <meta name="description" content="A guide to installing the NetBeans IDE on various OSs">
        <link rel="stylesheet" type="text/css" href="../../../netbeans.css">
    </head>
    <body>
        <a name="top"></a>
        <h1>NetBeans IDE 5.5 Installation Instructions </h1>

        <blockquote>
        <p>The following instructions cover installation of both NetBeans IDE
        5.5  (standalone) as well as the NetBeans IDE 5.5  and Sun
        Java System Application Server Platform Edition 9 Bundle. </p>

            <br>
            <div class="greybox">
                <p>For installation information about NetBeans Add-on packs, see: </p>
                
    <ul>
      <!--<li><a href="https://netbeans.org/community/releases/55/relnotes-mobility.html">Mobility Pack Installation Instructions</a></li>-->
      <li><a href="https://netbeans.org/community/releases/55/vwp-install.html">Visual 
        Web Pack Installation Instructions</a></li>
      <li><a href="https://netbeans.org/community/releases/55/entpack_install.html">Enterprise 
        Pack Installation Instructions</a></li>
      <li><a href="mobilitycdc-install.html">Mobility Pack for CDC Installation 
        Guide</a></li>
      <li><a href="http://profiler.netbeans.org/download/index.html">Profiler 
        Installation Instructions</a></li>
	  <li><a href="uml-download.html">UML Modeling Module Installation Instructions</a></li>	
      <!--<li><a href="https://netbeans.org/community/releases/55/">C/C++ Pack Release Notes</a></li>-->
    </ul>
            </div>           
        
        <br>
        <h2 style="color:#0E1B55">Contents</h2>
        <ul>
            <li><a href="#standalone">NetBeans IDE Installation </a></li>
            <li><a href="#bundle">NetBeans IDE and Sun Java System Application Server
            Bundle</a><a href="#bundle"> Installation</a></li>
            <li><a href="#launching">Launching the IDE</a></li>
            <li><a href="#registerstart">Registering and Starting the Application Server</a></li>
            <li><a href="#other">Other Operating Systems </a></li>
            <li><a href="#archives">Archive Distributions </a></li>
            <li><a href="#uninstall">Uninstallation</a></li>
            <li><a href="#troubleshooting">Troubleshooting</a></li>
        </ul>

        <p><b>Note: </b>For system requirements and other information, such as launching
        the IDE with different startup parameters, see the <a href="relnotes.html">Release
        Notes</a>.</p>
        </blockquote>
        <br>

        <a name="standalone"></a>
        <h2>NetBeans IDE  Installation (Standalone Installer)</h2>
        <p>Following are instructions for installing the standalone NetBeans IDE 5.5 
        on each of the supported platforms. </p>
        <blockquote>
            <a name="windows_standalone"></a>
            <h2 style="color:#0E1B55">Windows</a></h2>
            <p>On Microsoft Windows machines, the preferred method of installing NetBeans
            IDE is using the self-extracting installer.</p>
            <blockquote>
                <p><b>To install the NetBeans IDE:</b></p>
                <ol>
                    <li>Once you have downloaded the installer file, double-click the installer's
                    icon to launch the installer. </li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next.</li>
                    <br>
                    <li>Specify an empty directory within which to install NetBeans IDE.
                        <p><b>Note:</b> This NetBeans IDE will not disrupt the
                        settings of your other NetBeans installations because
                        the IDE automatically creates a new user directory
                        when launched (<tt>${HOME}/.netbeans/5.5</tt>). </li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list
                    of suitable choices in the list, then click Next.</li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="solaris_standalone"></a>
            <h2 style="color:#0E1B55"> Solaris Operating System (Solaris OS)</h2>
            <p>On machines running Solaris operating system, the binary installer is 
            the preferred method for installing NetBeans IDE. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE:</b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer.</li><br>
                    <li>If necessary, change the installer file's permissions to make the binary
                        executable by typing from a command prompt:
                        <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>Launch the installer by typing from a command prompt:
                        <blockquote> <code>$&nbsp;./<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Again, be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next. </li>
                    <br>
                    <li>Specify an empty directory within which to install NetBeans IDE, then
                    click Next.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the
                    list of suitable choices in the list, then click Next.<br>
                    <p>The installer searches for JDKs installed on your system
                    	and prompts you  to specify which one it should use. You
                    	can also specify which  JDK the IDE should use from
                    	the command line. For example:
                    <blockquote><code> $&nbsp;./<i>your_binary_executable</i>&nbsp;-is:javahome&nbsp;<i>path_to_your_jdk</i></code> </blockquote></li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="linux_standalone"></a>
            <h2 style="color:#0E1B55">Linux</a></h2>
            <p>On Linux machines, the binary installer is the preferred method for installing
            NetBeans IDE.</p>
            <blockquote>
                <p><b>To install the NetBeans IDE:</b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer.</li>
                    <br>
                    <li>If necessary, change the installer file's permissions to make the binary
                        executable by typing from a command prompt:
                        <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>Launch the installer by typing from a command prompt:
                        <blockquote> <code>$&nbsp;./<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Again, be sure to replace <code><i>your_binary_executable</i></code> <br>
                        with the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next. </li>
                    <br>
                    <li>Specify an empty directory within which to install NetBeans IDE, then
                    click Next.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the
                    list of suitable choices in the list, then click Next.<br>
                        <p>The installer searches for JDKs installed on your system
                    	and prompts you  to specify which one it should use. You
                    	can also specify which JDK  the IDE should use from
                    	the command line. For example:
                    <blockquote><code> $&nbsp;./<i>your_binary_executable</i>&nbsp;-is:javahome&nbsp;<i>path_to_your_jdk</i></code></blockquote></li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="macintosh_standalone"></a>
            <h2 style="color:#0E1B55">Macintosh OS X</h2>
            <p>On Macintosh OS X, NetBeans is packaged as a native application bundle. The
            preferred method of installing NetBeans IDE is using the tarball (<tt>.tar.gz</tt>)
            file.</p>
            <blockquote>
                <p><b>To install the NetBeans IDE:</b></p>
                <ol>
                    <li>Download the tarball to the desired location on your system. </li>
                    <br>
                    <li>Double-click the file to unpack the contents on your system. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

        <a name="bundle"></a>
        <h2>NetBeans IDE and Sun Java System Application Server Bundle Installation</h2>
        <p>Following are instructions for installing the NetBeans IDE 5.5  and 
        Sun Java System Application Server Platform Edition 9 bundle on all supported platforms.</p>
        <blockquote>
            <a name="windows_bundle"></a>
            <h2 style="color:#0E1B55"> Windows</h2>
            <p>On Microsoft Windows machines, the preferred method of installing
            NetBeans IDE and Sun Java System Application Server bundle is using 
            the self-extracting installer.</p>
            <blockquote>
                <p><b>To install the NetBeans IDE 5.5 and Sun Java System Application Server
                Platform Edition 9 bundle: </b></p>
                <ol>
                    <li>Once you have downloaded the installer file, double-click the installer's
                    icon to launch the installer. </li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next.</li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.<br>
                        <p><b>Note:</b> This NetBeans IDE will not disrupt the settings of
                        your other NetBeans installations because the IDE automatically creates
                        a new user directory when launched (<tt>${HOME}/.netbeans/5.5</tt>).</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory within which to install the Application
                    Server and click Next.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list of suitable
                    choices in the list, then click Next.</li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="solaris_bundle"></a>
            <h2 style="color:#0E1B55">Solaris Operating System (Solaris OS)</h2>
            <p>On machines running Solaris operating system, the binary installer is the preferred method for 
            installing NetBeans IDE and Sun Java System Application Server bundle. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE 5.5 and Sun Java System 
                Application Server Platform Edition 9 bundle: </b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer. </li>
                    <br>
                    <li>If necessary, change the installer file's permissions to make the binary
                        executable by typing from a command prompt:
                        <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p> </li>
                    <br>
                    <li>Launch the installer by typing from a command prompt:
                        <blockquote> <code>$&nbsp;./<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Again, be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p> </li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next. </li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.
                    The installation directory must not contain spaces in its
                    name.</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory within which to install the Application
                    Server and click Next.</li>
                    <br>
                    <li> Choose the JDK you want the IDE to use from the
                    list of suitable choices in the list, then click Next.
					<p>The installer searches for JDKs installed on your system
                    	and prompts you  to specify which one it should use. You
                    	can also specify which  JDK the IDE should use from
                    	the command line. For example:
                    <blockquote><code> $&nbsp;./<i>your_binary_executable</i>&nbsp;-is:javahome&nbsp;<i>path_to_your_jdk</i></code> </blockquote></li>
                    <br>

                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="linux_bundle"></a>
            <h2 style="color:#0E1B55">Linux</h2>
            <p>On Linux machines, the binary installer is the preferred method
            for installing  NetBeans IDE and Sun Java System Application Server
            bundle. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE and Sun Java System Application Server
                bundle: </b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer. </li>
                    <br>
                    <li>If necessary, change the installer file's permissions to make the binary
                        executable by typing from a command prompt:
                        <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p> </li>
                    <br>
                    <li>Launch the installer by typing from a command prompt:
                        <blockquote> <code>$&nbsp;./<i>your_binary_executable</i></code></blockquote>
                        <p><b>Note:</b> Again, be sure to replace <code><i>your_binary_executable</i></code>
                        with the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next. </li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.
                    The installation directory must not contain spaces in its
                    name.</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory within which to install the Application
                    Server and click Next.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list
                    of suitable choices in the list, then click Next.
                    <p>The installer searches for JDKs installed on your system
                    	and prompts you  to specify which one it should use. You
                    	can also specify which  JDK the IDE should use from
                    	the command line. For example:
                    <blockquote><code> $&nbsp;./<i>your_binary_executable</i>&nbsp;-is:javahome&nbsp;<i>path_to_your_jdk</i></code> </blockquote></li>
                    <br>
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect  the installation process.</p>
                </div>
            </blockquote>
            <br>

            <a name="macintosh_bundle"></a>
            <h2 style="color:#0E1B55">Macintosh OS X</h2>
            <p>On Mac OS X, the NetBeans and Sun Java System Application Server
            bundle is packaged as a jar file. </p>
            <blockquote>
                <p><b>To install the NetBeans IDE and Sun Java System Application Server
                bundle: </b></p>
                <ol>
                    <li>Navigate to the directory that contains the installer.
                    <li>If necessary, change the installer file's permissions to make the binary
                    executable by typing from a command prompt:
                    <blockquote> <code> $&nbsp;chmod&nbsp;+x&nbsp;<i>your_binary_executable</i></code></blockquote>
                    <p><b>Note:</b> be sure to replace <code><i>your_binary_executable</i></code> with
                    the actual filename of the binary that you downloaded.</p></li>
                    <br>
                    <li>Launch the installer by double-clicking the bundle installer jar file.</li>
                    <br>
                    <li>On the install wizard's initial panel, click Next to continue.</li>
                    <br>
                    <li>In the install wizard, respond to the License Agreement, then click Next.</li>
                    <br>
                    <li>Specify an empty directory within which to install the IDE.
                    The installation directory must not contain spaces in its
                    name. By default, NetBeans is installed in the Applications directory.</li>
                    <br>
                    <li>On the same page of the wizard, specify an empty directory
                    within which to install the Application Server and click Next.
                    By default, the Application server is installed in the
                    <tt>SUNWappserver</tt> subdirectory of your home directory.</li>
                    <br>
                    <li>Choose the JDK you want the IDE to use from the list
                    of suitable choices in the list, then click Next.
                    <p>The installer searches for JDKs installed on your system
                    	and prompts you  to specify which one it should use. You
                    	can also specify which  JDK the IDE should use from
                    	the command line. For example:
                    <blockquote><code> $&nbsp;./<i>your_binary_executable</i>&nbsp;-is:javahome&nbsp;<i>path_to_your_jdk</i></code> </blockquote></li>
                    <br>                    
                    <li>Verify that the installation location is correct and that you have adequate
                    space on your system for the installation.</li>
                    <br>
                    <li>Click Next to begin the installation. </li>
                </ol>
                <div class="greybox">
                    <p><b>Note: </b>If you encounter problems successfully completing the software
                    installation, see the <a href="#troubleshooting">Troubleshooting</a> section
                    below for full descriptions and suggested workarounds for unresolved
                    issues that could affect the installation process.</p>
                </div>
            </blockquote>
        </blockquote>
        <br>
        
<p align="center"><a href="#top">top</a></p><br>

<!--
        <a name="other"> <h2>Other Operating Systems</h2></a>
        <p>If you are using an operating system for which there is no installer you can
        still use NetBeans IDE by downloading and installing archive distributions.
        For more information, see the <a href="#archives">Archive Distributions</a>
        section below. </p>
        <br>

<p align="center"><a href="#top">top</a></p><br>
-->

        <a name="launching"></a>
        <h2>Launching the IDE</h2>
        <p>Following are instructions for starting the NetBeans IDE. If you are using
        an operating system for which there is no installer you can still use NetBeans
        IDE by downloading and installing archive distributions. For more information,
        see the <a href="#archives">Archive Distributions</a>
        section below. </p>

        <blockquote>
            <h2 style="color:#0E1B55">Windows</h2>
            <p><b>To start the IDE on Microsoft Windows machines, do one of the following:</b></p>
            <ul>
                <li>Double-click the NetBeans IDE icon on your desktop.</li>
                <br>
                <li>From the Start menu, select NetBeans IDE 5.5 &nbsp;&gt;&nbsp;NetBeans IDE.</li>
            </ul>
            <br>

            <h2 style="color:#0E1B55">Solaris Operating System (Solaris OS)</h2>
            <p><b>To start the NetBeans IDE on Solaris systems:</b></p>
            <ol>
                <li>Navigate to the <tt>bin</tt> subdirectory of your installation. </li>
                <br>
                <li>Execute the launcher script by typing <tt>./netbeans</tt>.
            </ol>
            <br>

            <h2 style="color:#0E1B55">Linux</h2>
            <p><b>To start the NetBeans IDE on Linux systems:</b></p>
            <ol>
                <li>Navigate to the <tt>bin</tt> subdirectory of your installation. </li>
                <br>
                <li>Execute the launcher script by typing <tt>./netbeans</tt>.
            </ol>
            <br>

            <h2 style="color:#0E1B55">Macintosh OS X</h2>
            <p><b>To start the NetBeans IDE on Mac OS X systems:</b></p>
            <ol>
                <li>Navigate to the directory of your installation. </li>
                <br>
                <li>Double-click the NetBeans IDE application icon. </li>
            </ol>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

        <a name="registerstart"> <h2>Registering and Starting the Application Server </h2></a>
        <p>If you used the standalone NetBeans IDE installer, you need to register
        the Application Server before you can use it.
        <blockquote>
            <p><b>Registering the Sun Java System Application Server</b></p>
            <p>To register the Sun Java System Application Server:
            <ol>
                <li>Go to Tools &gt;&nbsp;Server Manager.</li>
                <br>
                <li>In the Server Manager, click Add Server. </li>
                <br>
                <li>In the dialog box, select Sun Java System Application Server 9 and click
                Next.</li>
                <br>
                <li>Enter a name for the server instance. This name is used to identify the
                server in the IDE.</li>
                <br>
                <li>Enter the location, user name, and password. You do not need to enter
                the installation location and domain if you are registering a remote
                instance of the server. You must register a local installation of the
                application server before you can register remote instances.</li>
                <br>
                <li>Click Finish. </li>
            </ol>
            <p><b>Note:</b> If you used the bundle installer, the Sun Java System Application
            Server was installed and configured automatically so it is not necessary to
            carry out the registration procedure outlined above. </p>
            <br>
            <p><b>Starting the Sun Java System Application Server</b></p>
            <p>To start the Application Server:
            <ol>
                <li>In the Runtime window, right-click the newly-created localhost node and
                choose Start/Stop Server from the contextual menu. </li>
                <br>
                <li>In the Server Status dialog, click Start Server.</li>
                <br>
                <li> Click Close to close the dialog box.</li>
            </ol>
            <div class="greybox">
                <p><b>Note: </b>The NetBeans IDE and Sun Java System Application Server bundle
                creates the <tt>admin</tt> user with password <tt>adminadmin</tt> by default.
                Users should use these settings to log in via the web console. </p>
            </div>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

        <a name="archives"> <h2>Archive Distributions</h2></a>
        <p>If you are using an operating system for which there is no installer
        you can still use NetBeans IDE by downloading and installing archive
        distributions. You can also install archive distributions of the IDE if
        you want to test development builds.</p>
        <blockquote>
            <p><b>To install archive NetBeans IDE distributions: </b></p>
            <ol>
                <li>Navigate to the directory that contains the archive file. </li>
                <br>
                <li>Unpack the archive using the appropriate utilities for your system.
            </ol>
            <p><b>To launch archive NetBeans IDE distributions:</b> </p>
            <ol>
                <li>Navigate to the <tt>bin</tt> subdirectory of your NetBeans IDE installation.</li>
                <br>
                <li>Execute the appropriate launcher for your system. </li>
            </ol>
            <p>The following launchers are included in the archive distributions: </p>
            <ul>
                <li><tt>netbeans.exe</tt> - Windows</li>
                <li><tt>nb.exe</tt> - Windows (from within a console window)</li>
                <li><tt>netbeans</tt> - UNIX, Linux </li>
                <li><tt>NetBeans </tt> - Mac OS X </li>
                <li><tt>netbeans.cmd</tt> - OS/2 </li>
                <!--<li><tt>netbeansopenvms.com</tt> - OpenVMS -->
            </ul>
            <p>If there is no specific launcher for your operating system, you may need
            to create one by modifying the appropriate script. If your machine supports
            JDK 1.5.0 or greater you should, however, be able to run the IDE.
            <p><b>Note</b>: If you create a launcher, you can contribute it to the NetBeans
            project. For more information, see <a href="https://netbeans.org/community/contribute/index.html">Contributing
            to netbeans.org</a>. </p>
        </blockquote>
        <br>

<p align="center"><a href="#top">top</a></p><br>

    <a name="uninstall"> <h2>Uninstalling NetBeans IDE </h2></a>
    <p>If necessary, you can uninstall the NetBeans IDE using the following procedures.</p>
    <blockquote>
        <h3 style="color:#0E1B55">Uninstalling the NetBeans IDE 5.5  from Windows</h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>From your system's Start menu, choose Control Panel.</li>
                <br>
                <li>Double-click the Add or Remove Programs icon.</li>
                <br>
                <li>Select NetBeans IDE 5.5  from the list and click Remove.</li>
            </ol>
            
            <p><b>To uninstall the Sun Java System Application Server
            Platform Edition 9:</b></p>
            <ol>
                <li>From your system's Start menu, open the Control Panel.</li>
                <br>
                <li>Double-click the Add or Remove Programs icon.</li>
                <br>
                <li>Select the Sun Java System Application Server Platform
                Edition 9 from the list and click Remove.</li>
            </ol>
            <!--<p><b>Note:</b> If you uninstall the J2SE JDK software, but
            wish to continue using NetBeans IDE, you must set the IDE's
            <tt>-jdkhome</tt> parameter to point to an alternate installation of the J2SE
            JDK as outlined below.</p>-->
        </blockquote>

        <h3 style="color:#0E1B55">Uninstalling the NetBeans IDE 5.5  from Solaris (SPARC and x86 Platform Editions) </h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>Navigate to the <tt>_uninst</tt> subdirectory of your NetBeans
                IDE installation directory.</li>
                <br>
                <li>Type <tt>./uninstaller</tt> to run the InstallShield uninstaller.</li>
            </ol>
            
            <p><b>To uninstall the Sun Java System Application Server:</b></p>
            <ol>
                <li>Navigate to the installation directory of the Sun
                Java System Application Server Platform Edition 9.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstall</tt> to run the uninstaller.</li>
            </ol>
        </blockquote>

        <h3 style="color:#0E1B55">Uninstalling the NetBeans IDE 5.5  from Linux </h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>Navigate to the <tt>_uninst</tt> subdirectory
                of your NetBeans IDE installation directory.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstaller</tt> to run
                the InstallShield uninstaller.</li>
            </ol>
            
            <p><b>To uninstall the Sun Java System Application Server:</b></p>
            <ol>
                <li>Navigate to the installation directory of the Sun
                Java System Application Server Platform Edition 9.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstall</tt> to run the uninstaller.</li>
            </ol>
        </blockquote>

        <h3 style="color:#0E1B55">Uninstalling the NetBeans IDE 5.5  from Macintosh OS X </h3>
        <blockquote>
            <p><b>To uninstall NetBeans IDE:</b></p>
            <ol>
                <li>Navigate to the installation location of the NetBeans IDE.
                By default, NetBeans is installed in the Applications directory.</li>
                <br>
                <li>Right-click the NetBeans icon and choose Move to Trash
                from the pop-up menu.</li>
                <!--
                <br>
                <li>In the window that appears, navigate to the <tt>_uninst</tt>
                subdirectory. </li>
                <br>
                <li>In a terminal window, type <tt>./uninstaller</tt> to run the InstallShield uninstaller.</li>
                -->
            </ol>
            
            <p><b>To uninstall the Sun Java System Application Server:</b></p>
            <ol>
                <li>Navigate to the installation directory of the Sun Java System
                Application Server Platform Edition 9. By default, the Application
                server is installed in the <tt>SUNWappserver</tt> subdirectory of your
                home directory.</li>
                <br>
                <li>In a terminal window, type <tt>./uninstall</tt> to run the uninstaller.</li>
            </ol>
        </blockquote>
    </blockquote>

<p align="center"><a href="#top">top</a></p><br>

        <a name="troubleshooting"><h2>Troubleshooting</h2></a>
        <p>If you experience problems installing or running the software, see the
        list of issues below for workarounds. For a complete list of known issues,
        system requirements and other useful information, see the <a href="relnotes.html">Release
        Notes</a>. </p>
        <p> Following are the unresolved issues for this release that could affect
        or disrupt the installation process: </p>
        <ul>
            <!--<li><h3>General Issues</h3>
            <blockquote>
                <p><b>Description:</b></p>
                <p>The installer for the NetBeans IDE and Sun Java System Application
                Server bundle does not let you install on JDK 6.0, because Sun Java
                System Application Server Platform Edition 8.2 has several serious
                issues on pre-release versions of JDK 6.0. However, you can install
                the NetBeans IDE standalone installer on JDK 6.0.
            </blockquote>
            <br>-->
            <!--
            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=72601">Issue #72601</a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>After specifying the location of the Sun Java System Application
                Server and clicking Next, the wizard page becomes blank, and it is impossible to
                continue the installation.
                <p><b>Workaround:</b></p>
                <p>In the wizard, press Cancel. On your system, navigate to
                the NetBeans IDE installation directory that installer has just created and
                delete that directory. Then run the installer again and specify a location for the
                application server installation directory that is not inside of the NetBeans IDE
                installation directory.</p>
            </blockquote>
            <br>-->
            
            <li> <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=26965">Issue #26965</a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>When using JDK installations that include an incompatible version of <tt>sax.jar</tt>,
                the IDE installer crashes with the following message:
                &quot;The wizard cannot continue because of the following error: could
                not load wizard specified in /wizard.inf (104)&quot;
                <p><b>Workaround:</b></p>
                <p>Temporarily remove <tt>jre/lib/endorsed/sax.jar</tt> from the JDK directory
                during IDE installation.
                </blockquote><br>

            <!--
            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=52856">Issue #52856 (Windows XP only) </a>
            <blockquote>
            <p><b>Description:</b></p>
                <p>Sun Java System Application Server  installation fails. Note that
                this problem has been known to occur both when using the NetBeans IDE 5.5
                and Sun Java System Application Server Platform Edition 8.2 Bundle
                installer as well as the stand-alone Application Server installer.
                This happens when a previous installation of the Application Server has failed and
                subsequent attempts at  uninstallation were also unsuccessful (i.e. some
                registry entries or configuration files weren't deleted).
                <p><b>Workaround:</b></p>
                <p>If this happens, remove all previous installations of the Sun Java
                System Application Server. Then delete the installer's <code>&lt;USERHOME&gt;\Local
                Settings\temp\</code> directory and the Application Server's <code><userhome>\Application
                Data\Sun\tmp\</code> directory (note that files may also be located in <code>&lt;WINDIR&gt;\Sun\</code>).
                If a previous uninstallation attempt of the Application Server was
                unsuccessful, also delete the <code>&lt;SYSTEMDIR&gt;/productregistry</code> file.
                Next, create a new directory within which to install the software
                and ensure that the directory is empty and writable. Finally, reinstall
                the Application Server in the new location on your system. <!--<b>Note: </b>in
                general, it is recommended that users use the provided uninstaller
                to remove Application Server installations.
            </blockquote><br>
            -->

            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=65482">Issue #65482 (Linux only) </a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>Unable to install NetBeans on some Mandrake/Mandriva Linux distributions. 
                During initialization, the installer displays the following message:
                    <blockquote>
                        <pre>Initializing InstallShield Wizard........<br>./netbeans-5_0-bin-linux.bin: line 189: bc: command not found<br>./netbeans-5_0-bin-linux.bin: line 404: [: : integer expression expected </pre>
                    </blockquote>
                <p><b>Workaround:</b></p>
                <p>NetBeans installer uses GNU's bc utility, which doesn't seem to install
                by default in Mandriva. If you experience this problem, install GNU's
                bc utility manually prior to installing NetBeans. If you have an active
                Internet connection, you can  run <tt>urpmi bc</tt> from the command
                line to accomplish this. Note that it is also possible to download
                the appropriate RPM and install using the <tt>rpm -i
                &lt;bc_package&gt;.rpm</tt> command.</p>
            </blockquote>
            <br>

            <li><a href="https://netbeans.org/bugzilla/show_bug.cgi?id=67530">Issue #67530 </a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>After starting the installer, you get a message that says "Welcome
                to the Install Wizard for ERROR: null". This could be caused by running
                multiple installers simultaneously or by running the installer after another
                installer that has failed to exit.</p>
                <p><b>Workaround:</b></p>
                <p>Delete the contents of the <tt>\InstallShield\Universal\Common</tt> directory
                and then restart the installer.</p>
                <p>On Windows systems, this directory is located at <tt>C:\Program Files\Common files\InstallShield\Universal\Common</tt>.</p>
                <p>On Solaris and Linux systems, this directory is located at
                <tt><i>/$HOME</i>/InstallShield/Universal/Common</tt>.</p>
            </blockquote>

            <li> <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=52012">Issue #52012 (only Turkish locale on Windows XP systems)</a>
            <blockquote>
                <p><b>Description:</b></p>
                <p>For systems set to use the Turkish locale, the installer does not successfully
                finish.</p>
                <p><b>Workaround:</b></p>
                <p>Cancel the installer. On your system, switch to the English (United States) locale and then
                restart the installer. </p>
                <p>On Windows XP systems, you can switch locales on your system by choosing Start | Control Panel
                 and double-clicking Regional and Language Options. Then select the locale from the
                 drop-down list in the Standards and Formats section of the dialog box.</p>
            </blockquote><br>
        </ul>

    <p align="center"><a href="#top">top</a></p><br>
    </body>
</html>
