package org.wiztools.restclient.ui.component; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import javax.swing.SwingUtilities; /** * * @author subhash */ public class BackgroundFormatterJob { private final ExecutorService formatterThreadPool = Executors.newSingleThreadExecutor(); private Future formatterFuture; public void run(Runnable r, final BodyPopupMenuListener listener, boolean isSeparateThread) { if(isSeparateThread) { if(formatterFuture != null && !formatterFuture.isDone()) { listener.onMessage("Last formatter job running!"); return; } listener.onMessage("Starting formatter job..."); new Thread() { @Override public void run() { while(true) { // Sleep: try { TimeUnit.SECONDS.sleep(30); } catch(InterruptedException ex) { ex.printStackTrace(); } // Feedback to user: if(formatterFuture != null && !formatterFuture.isDone()) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { listener.onMessage("Still running formatter job..."); } }); } else { break; } } } }.start(); formatterFuture = formatterThreadPool.submit(r); } else { r.run(); } } public void cancelRunningJob() { if(formatterFuture != null && !formatterFuture.isDone()) { formatterFuture.cancel(true); } } }