diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java index 2cc47eda96ab67120df1d15d0ba08aad19f4c3f0..95050b37c884cd02d32d126f23a9e8fcbd7461eb 100644 --- a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java @@ -356,24 +356,21 @@ public class DesktopImportControllerUI implements ImportControllerUI { importer.getClass().getSimpleName())); String taskName = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); - executor.execute(task, new Runnable() { - @Override - public void run() { - try { - Container container; - if (importer instanceof FileImporter.FileAware && file != null) { - container = controller.importFile(file, importer); - } else { - container = controller.importFile(reader, importer); - } + executor.execute(task, () -> { + try { + Container container; + if (importer instanceof FileImporter.FileAware && file != null) { + container = controller.importFile(file, importer); + } else { + container = controller.importFile(reader, importer); + } - if (container != null) { - container.setSource(containerSource); - results.add(container); - } - } catch (Exception ex) { - throw new RuntimeException(ex); + if (container != null) { + container.setSource(containerSource); + results.add(container); } + } catch (Exception ex) { + throw new RuntimeException(ex); } }, taskName, errorHandler.createHandler(containerSource)); } diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java index dd991d178cad99aadd8613f6497c16a7518fa745..8e81053776576f72226542b8931c478b3974b82e 100644 --- a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java @@ -47,6 +47,10 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; @@ -222,22 +226,28 @@ public class ProjectControllerUIImpl implements ProjectListener { }); } - private void saveProject(Project project, File file) { - longTaskExecutor.execute(null, () -> { - controller.saveProject(project, file); + private Future saveProject(Project project, File file) { + + + return longTaskExecutor.execute(null, new Callable() { + @Override + public Void call() throws Exception { + controller.saveProject(project, file); + return null; + } }); } - public void saveProject() { + public Future saveProject() { Project project = controller.getCurrentProject(); if (project.hasFile()) { - saveProject(project, project.getFile()); + return saveProject(project, project.getFile()); } else { - saveAsProject(); + return saveAsProject(); } } - public void saveAsProject() { + public Future saveAsProject() { final String LAST_PATH = "SaveAsProject_Last_Path"; final String LAST_PATH_DEFAULT = "SaveAsProject_Last_Path_Default"; @@ -281,8 +291,9 @@ public class ProjectControllerUIImpl implements ProjectListener { NbPreferences.forModule(ProjectControllerUIImpl.class).put(LAST_PATH, file.getAbsolutePath()); // Save file - saveProject(controller.getCurrentProject(), file); + return saveProject(controller.getCurrentProject(), file); } + return CompletableFuture.completedFuture(null); } private boolean canExport(JFileChooser chooser) { @@ -335,7 +346,14 @@ public class ProjectControllerUIImpl implements ProjectListener { new Object[] {saveBundle, doNotSaveBundle, cancelBundle}, saveBundle); Object result = DialogDisplayer.getDefault().notify(msg); if (result == saveBundle) { - saveProject(); + Future saveTask = saveProject(); + if(saveTask !=null){ + try { + saveTask.get(); + } catch (InterruptedException | ExecutionException ex) { + Exceptions.printStackTrace(ex); + } + } } else if (result == cancelBundle) { return false; }