diff --git a/openide.util/src/org/openide/util/RequestProcessor.java b/openide.util/src/org/openide/util/RequestProcessor.java --- a/openide.util/src/org/openide/util/RequestProcessor.java +++ b/openide.util/src/org/openide/util/RequestProcessor.java @@ -49,7 +49,11 @@ import java.util.Stack; import java.util.Timer; import java.util.TimerTask; +import java.util.concurrent.Callable; import java.util.concurrent.Executor; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -426,6 +430,37 @@ } } + public Future submit (Callable callable) { + return submit (callable, 0, TimeUnit.MILLISECONDS); + } + + public Future submit (Callable callable, int milliseconds) { + return submit (callable, milliseconds, TimeUnit.MILLISECONDS); + } + + public Future submit (Callable callable, long delay, TimeUnit timeUnit) { + CF cf = new CF(callable); + Task task = this.create(cf); + cf.task = task; + long actualDelay = timeUnit.convert(delay, TimeUnit.MILLISECONDS); + if (actualDelay > Integer.MAX_VALUE || actualDelay < 0) { + throw new IllegalArgumentException ("Illegal delay " + actualDelay); + } + task.schedule((int) actualDelay); + return cf; + } + + private static final class CF extends FutureTask { + private Task task; + CF(Callable c) { + super (c); + } + + @Override + public boolean cancel(boolean mayInterruptIfRunning) { + return task.cancel() & super.cancel(mayInterruptIfRunning); + } + } // // Static methods communicating with default request processor //