<!--

    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.

-->

<html>
<body>

NetBeans uses a small interface to describe the <em>execution</em>

of Java-based classes together with arguments.

<p>The <a href="doc-files/api.html"><b>Execution API</b></a> may be
used both to invoke the preexisting (internal and external) executors,
and to create custom ones. Running processes may be halted, their exit
status may be obtained, and their I/O streams will be displayed.

<p>The API, in conjunction with the Datasystems API, also supports
association of a specific executor to a given class (file), which can
be used to provide special execution support for objects such as
applets or servlets.

</body>
</html>
