The following example fetches Facebook data in a background process and passes the data to the GUI.
SwingWorker<User, String> fetchUserWorker = new SwingWorker<User, String>() { @Override protected User doInBackground() throws Exception { IFacebookController controller = new RestFBController(accessToken); User user = controller.fetchMe(); return user; } @Override protected void done() { User user; try { BackgroundProcess.this.mainGui.appendProgressLog("Fetched user record"); // get the user object from doInBackground() user = get(); mainGui.setCurrentUser(user); } catch (InterruptedException | ExecutionException e) { BackgroundProcess.this.mainGui.appendProgressLog("ERROR fetching facebook data "+e.getMessage()); e.printStackTrace(); } } }; BackgroundProcess.this.mainGui.appendProgressLog("Fetch Current User - Connecting to Facebook"); fetchUserWorker.execute();