code: private void cmdExecuteQueryActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_buttonExecuteActionPerformed
  		try {
  			// TODO Handle this such that there is a listener checking the progress of the execution
  			Thread queryRunnerThread = new Thread(() -> {
  				String queryString = queryTextPane.getText();
                  OBDADataQueryAction<?> action = null;
  				if (queryString.isEmpty()){
  					JOptionPane.showMessageDialog(QueryInterfacePanel.this, "Query editor cannot be empty.");
  				} else if (SPARQLQueryUtility.isSelectQuery(queryString)) {
  					action = QueryInterfacePanel.this.getExecuteSelectAction();
  				} else if (SPARQLQueryUtility.isAskQuery(queryString)){
  					action = QueryInterfacePanel.this.getExecuteAskAction();
                  } else if ((SPARQLQueryUtility.isConstructQuery(queryString) || SPARQLQueryUtility.isDescribeQuery(queryString)) ){
                      action = QueryInterfacePanel.this.getExecuteGraphQueryAction();
                  } else {
                      JOptionPane.showMessageDialog(QueryInterfacePanel.this, "This type of SPARQL expression is not handled. Please use SELECT, ASK, DESCRIBE, or CONSTRUCT.");
                  }
  				if(action!=null) {
  					action.run(queryString);
  					execTime = action.getExecutionTime();
  					do {
  						int rows = action.getNumberOfRows();
  						updateStatus(rows);
  						try {
  							Thread.sleep(100);
  						} catch (InterruptedException e) {
  							break;
  						}
  					} while (action.isRunning());
  					int rows = action.getNumberOfRows();
  						updateStatus(rows);
  
  				}
              });
  			queryRunnerThread.start();
  		} catch (Exception e) {
  			DialogUtils.showQuickErrorDialog(QueryInterfacePanel.this, e);
  		}
  	}
docs: GEN-LAST:event_buttonAdvancedPropertiesActionPerformed