private void ExecuteAssincronousCommand(String CommandText, File WorkingDirectory) {

        try {
            done = false;
            ExternalProcessResultList.clear();
            jLDBSniffer.setText("Detector Started");
            ExternalProcess = Runtime.getRuntime().exec(CommandText, null, WorkingDirectory);
            jTPFile.setText("");
            // Optional: start a thread to wait for the process to terminate.
            // Don't just wait in main line, but here set a "done" flag and
            // use that to control the main reading loop below.
            processThread = new Thread() {

                public void run() {
                    try {
                        System.out.println("processThread Started");
                        ExternalProcess.waitFor();
                    } catch (InterruptedException ex) {
                        // OK, just quit.
                    }
//                    System.out.println("Program terminated!");
                    ExternalProcessResultList.add("Program terminated!");
                    jLDBSniffer.setText("DBSniffer Stopped");
                    done = true;
                    System.out.println("processThread Stopped");
                }
            };

            inReadThread = new Thread() {

                public void run() {
                    BufferedReader pis;  // reader for output of process

                    String pline = "";
                    int offset = 0;
                    String output = "";

                    try {
                        System.out.println("inReadThread Started");
                        // getInputStream gives an Input stream connected to
                        // the process p's standard output (and vice versa). We use
                        // that to construct a BufferedReader so we can readLine() it.
                        pis = new BufferedReader(new InputStreamReader(ExternalProcess.getInputStream()));

                        while (!done && ((pline = pis.readLine()) != null) && !isInterrupted()) {
//                System.out.println(pline);
                            ExternalProcessResultList.add(pline);

                            offset = jTPFile.getDocument().getLength() - 10240;
                            if (offset > 0) {
                                try {
                                    output = jTPFile.getText(offset, 10240) + "\n" + pline;
                                } catch (Exception err) {
                                }
                            } else {
                                output = jTPFile.getText() + "\n" + pline;
                            }
                            jTPFile.setText(output);
                            //to go to the end of the TextPane
                            jTPFile.setCaretPosition(jTPFile.getDocument().getLength());

                        }
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                    System.out.println("inReadThread Stopped: " + done + " - " + pline + " - " + isInterrupted());
                }
            };

            processThread.start();
            inReadThread.start();


        } catch (Exception err) {

            System.err.println("Error2!");
            err.printStackTrace();
        }
    }