public static ExpiringSwingTimer runWhen(BooleanSupplier isReady, int expireMs,
			Runnable runnable) {

		// Note: we could let the client specify the delay, but that would add an extra argument
		//       to this method. For now, just use something reasonable.
		int delay = 250;
		ExpiringSwingTimer timer = new ExpiringSwingTimer(delay, expireMs, isReady, runnable);
		timer.start();
		return timer;
	}
Runs the given client runnable when the given condition returns true.  The returned timer
will be running.

<p>Once the timer has performed the work, any calls to start the returned timer will
not perform any work.  You can check {@link #didRun()} to see if the work has been completed.

@param isReady true if the code should be run
@param expireMs the amount of time past which the code will not be run
@param runnable the code to run
@return the timer object that is running, which will execute the given code when ready
Ghidra/Framework/Generic/src/main/java/generic/timer/ExpiringSwingTimer.java