@Override
		public void run(TaskMonitor monitor) {
			if (isLoaded()) {
				// this means that another background thread loaded the children before we
				// had a chance to run.  Since we last left the JTree thinking there is an 
				// "in progress" node in place, we need to notify the JTree that this is no longer
				// the case.
				fireNodeStructureChanged();
				return;
			}

			long progressValue = monitor.getProgress();
			long maxValue = monitor.getMaximum();
			monitor.setMessage("Loading children");
			try {
				setChildren(generateChildren(monitor));
			}
			catch (CancelledException e) {
				if (!tree.isDisposed()) {
					runOnSwingThread(new Runnable() {
						@Override
						public void run() {
							tree.collapseAll(tree.getViewRoot());
						}
					});
				}
				doSetChildren(null);
			}
			finally {
				monitor.initialize(maxValue);
				monitor.setProgress(progressValue);
			}
		}
Subclass must implement this method to generate their children. This operation will always be
performed in a background thread (i.e. Not the swing thread)

@param monitor a TaskMonitor for reporting progress and cancel notification.
@return the list of children for this node.
@throws CancelledException if the monitor is cancelled
Ghidra/Framework/Docking/src/main/java/docking/widgets/tree/GTreeSlowLoadingNode.java