use ProgressMonitorSwingWorker