added a swing worker class to handle long running UI process