From 98e1daf893d36a0c2779d1b477ff9f674bc7fc06 Mon Sep 17 00:00:00 2001 From: crschnick Date: Sun, 9 Apr 2023 17:14:07 +0000 Subject: [PATCH] Fix platform thread issue --- .../app/browser/StandaloneFileBrowser.java | 72 ++++++++++--------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/io/xpipe/app/browser/StandaloneFileBrowser.java b/app/src/main/java/io/xpipe/app/browser/StandaloneFileBrowser.java index d42ab294..f7ff2dde 100644 --- a/app/src/main/java/io/xpipe/app/browser/StandaloneFileBrowser.java +++ b/app/src/main/java/io/xpipe/app/browser/StandaloneFileBrowser.java @@ -3,6 +3,7 @@ package io.xpipe.app.browser; import io.xpipe.app.core.AppFont; import io.xpipe.app.core.AppI18n; import io.xpipe.app.core.AppWindowHelper; +import io.xpipe.app.fxcomps.util.PlatformThread; import io.xpipe.core.impl.FileStore; import javafx.beans.property.Property; import javafx.stage.FileChooser; @@ -14,46 +15,53 @@ import java.util.Map; public class StandaloneFileBrowser { - public static void localOpenFileChooser(Property fileStoreProperty, Window owner, Map> extensions) { - FileChooser fileChooser = new FileChooser(); - fileChooser.setTitle(AppI18n.get("browseFileTitle")); - fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(AppI18n.get("anyFile"), "*")); - extensions.forEach((key, value) -> { - fileChooser - .getExtensionFilters() - .add(new FileChooser.ExtensionFilter( - key, value.stream().map(v -> "*." + v).toArray(String[]::new))); - }); + public static void localOpenFileChooser( + Property fileStoreProperty, Window owner, Map> extensions) { + PlatformThread.runLaterIfNeeded(() -> { + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle(AppI18n.get("browseFileTitle")); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter(AppI18n.get("anyFile"), "*")); + extensions.forEach((key, value) -> { + fileChooser + .getExtensionFilters() + .add(new FileChooser.ExtensionFilter( + key, value.stream().map(v -> "*." + v).toArray(String[]::new))); + }); - File file = fileChooser.showOpenDialog(owner); - if (file != null && file.exists()) { - fileStoreProperty.setValue(FileStore.local(file.toPath())); - } + File file = fileChooser.showOpenDialog(owner); + if (file != null && file.exists()) { + fileStoreProperty.setValue(FileStore.local(file.toPath())); + } + }); } public static void openSingleFile(Property file) { - var model = new FileBrowserModel(FileBrowserModel.Mode.SINGLE_FILE_CHOOSER); - var comp = new FileBrowserComp(model) - .apply(struc -> struc.get().setPrefSize(1200, 700)) - .apply(struc -> AppFont.normal(struc.get())); - var window = AppWindowHelper.sideWindow(AppI18n.get("openFileTitle"), stage -> comp, true, null); - model.setOnFinish(fileStores -> { - file.setValue(fileStores.size() > 0 ? fileStores.get(0) : null); - window.close(); + PlatformThread.runLaterIfNeeded(() -> { + var model = new FileBrowserModel(FileBrowserModel.Mode.SINGLE_FILE_CHOOSER); + var comp = new FileBrowserComp(model) + .apply(struc -> struc.get().setPrefSize(1200, 700)) + .apply(struc -> AppFont.normal(struc.get())); + var window = AppWindowHelper.sideWindow(AppI18n.get("openFileTitle"), stage -> comp, true, null); + model.setOnFinish(fileStores -> { + file.setValue(fileStores.size() > 0 ? fileStores.get(0) : null); + window.close(); + }); + window.show(); }); - window.show(); } public static void saveSingleFile(Property file) { - var model = new FileBrowserModel(FileBrowserModel.Mode.SINGLE_FILE_SAVE); - var comp = new FileBrowserComp(model) - .apply(struc -> struc.get().setPrefSize(1200, 700)) - .apply(struc -> AppFont.normal(struc.get())); - var window = AppWindowHelper.sideWindow(AppI18n.get("saveFileTitle"), stage -> comp, true, null); - model.setOnFinish(fileStores -> { - file.setValue(fileStores.size() > 0 ? fileStores.get(0) : null); - window.close(); + PlatformThread.runLaterIfNeeded(() -> { + var model = new FileBrowserModel(FileBrowserModel.Mode.SINGLE_FILE_SAVE); + var comp = new FileBrowserComp(model) + .apply(struc -> struc.get().setPrefSize(1200, 700)) + .apply(struc -> AppFont.normal(struc.get())); + var window = AppWindowHelper.sideWindow(AppI18n.get("saveFileTitle"), stage -> comp, true, null); + model.setOnFinish(fileStores -> { + file.setValue(fileStores.size() > 0 ? fileStores.get(0) : null); + window.close(); + }); + window.show(); }); - window.show(); } }