private void monitorQuery() {
        final long nnow = System.currentTimeMillis();
        // Set up a small thread-ed process to monitor the query process
        Thread monitorProcess = new Thread(new Runnable() {
            public void run() {
                while (sqlModelFactory.isActive()) {
                    try { Thread.sleep(250); } catch (Exception ex) {}
                }
                redBtnPush(false);

                // Do a little fun re-sizing of the table columns
                TableColumnModel tcm = resultTable.getColumnModel();
                int colCnt = tcm.getColumnCount();
                for (int i=0;  i<colCnt;  i++) {
                    TableColumn tc = tcm.getColumn(i);
                    int colWidth = resultTableModel.getCharacterWidth(i);
                    int hdrWidth = String.valueOf(tc.getHeaderValue()).length() * 7 / 4;
                    int pixels = (Math.max(colWidth, hdrWidth) + 2) * 5;
                    tc.setPreferredWidth(Math.min(pixels, 400));
                }

                // Check to see if there was an error returned
                int    rowCnt  = resultTableModel.getRowCount();   
                String message = "Rows returned: " + rowCnt;
                message += "\n\nTime: " + (System.currentTimeMillis() - nnow) + " milliseconds";
                message += sqlModelFactory.getMessage();
                messageArea.setText(message);

                String errorMessage = sqlModelFactory.getErrorMessage();
                if (errorMessage != null  &&  errorMessage.trim().length() > 0) {
                    if (errorMessage.length() > 1024) {
                        errorMessage = errorMessage.substring(0,1024) + " ...";
                    }
                    JOptionPane.showMessageDialog(null, errorMessage, "Errors", JOptionPane.ERROR_MESSAGE);
                }

                if (rowCnt > 0) {
                    if (isQueryResultsSplit) {
                        tabbedPane.setSelectedComponent(resultPane);
                    } else {
                        tabbedPane.setSelectedComponent(querySplitPane);
                    }
                } else {
                    tabbedPane.setSelectedComponent(messagePane);
                }
            }
        });
        monitorProcess.start();
    }