public void execute(String commandLine, String path, CommandGui gui) {
        executing = true;
        int size = filters.size();
        if (size < 1) {
            return;  // All done!
        }

        String title = "<Command> " + commandLine;
        String pathTitle = "<Path> " + path;

        TextPanel outputPanel = new TextPanel(10, 60);
        JTextArea outputTextArea = outputPanel.getTextArea();
        TextPanel errorPanel = new TextPanel(5, 60);
        JTextArea errorTextArea = errorPanel.getTextArea();
        gui.addOutputPanel(outputPanel);
        gui.addErrorPanel(errorPanel);

        outputPanel.setCommand(title);
        outputPanel.setPath(pathTitle);
        errorPanel.setCommand(title);
        errorPanel.setPath(pathTitle);

        // Connect the filters.
        for (int j = 0; j < size; ++j) {
            // NYI : Connect the first filter to useful input
            // like the input text area.
            Filter nextFilter = (Filter) filters.elementAt(j);
            if (j == 0) {
            }
            if (j == size - 1) {
                if (!nextFilter.outputIsConnected()) {
                    // The last filter connects to the text area or stdout.
                    // if not already connected.
                    if (outputTextArea == null) {
                        nextFilter.connectOutput(System.out);
                    } else {
                        nextFilter.connectOutput(outputTextArea);
                    }
                }

                // For command filters, connect stderr
                if (nextFilter instanceof CommandFilter) {
                    if (errorTextArea == null) {
                        ((CommandFilter) nextFilter).connectErrorOutput(
                                System.err);
                    } else {
                        ((CommandFilter) nextFilter).connectErrorOutput(
                                errorTextArea);
                    }
                }
            } else {
                nextFilter.connectOutput((Filter) filters.elementAt(j + 1));
            }
        }
	 
        // Finally, run it.
        ((Filter) filters.elementAt(0)).start();
        executing = false;
    }