package com.kenai.redminenb.util; import org.openide.util.Cancellable; public abstract class CancelableRunnable implements Runnable, Cancellable { private volatile Thread runningThread; @Override public final void run() { runningThread = Thread.currentThread(); try { guardedRun(); } catch (RuntimeException ex) { throw ex; } runningThread = null; } protected abstract void guardedRun(); @Override public boolean cancel() { Thread thread = runningThread; if(thread != null) { thread.interrupt(); } return true; } }