Skip to content

Commit a06da53

Browse files
CiiLuGlavoCopilot
authored
修复清理游戏资源 / 库操作在 FXThread 运行的问题 (#5301)
Co-authored-by: Glavo <zjx001202@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 765ea24 commit a06da53

1 file changed

Lines changed: 30 additions & 7 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/ui/versions/VersionPage.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,21 @@
3030
import org.jackhuang.hmcl.event.EventPriority;
3131
import org.jackhuang.hmcl.event.RefreshedVersionsEvent;
3232
import org.jackhuang.hmcl.game.GameRepository;
33-
import org.jackhuang.hmcl.game.HMCLGameRepository;
3433
import org.jackhuang.hmcl.setting.Profile;
34+
import org.jackhuang.hmcl.task.Schedulers;
35+
import org.jackhuang.hmcl.task.Task;
36+
import org.jackhuang.hmcl.ui.Controllers;
3537
import org.jackhuang.hmcl.ui.FXUtils;
3638
import org.jackhuang.hmcl.ui.SVG;
3739
import org.jackhuang.hmcl.ui.WeakListenerHolder;
3840
import org.jackhuang.hmcl.ui.animation.TransitionPane;
3941
import org.jackhuang.hmcl.ui.construct.*;
4042
import org.jackhuang.hmcl.ui.decorator.DecoratorAnimatedPage;
4143
import org.jackhuang.hmcl.ui.decorator.DecoratorPage;
44+
import org.jackhuang.hmcl.util.StringUtils;
4245
import org.jackhuang.hmcl.util.io.FileUtils;
4346

47+
import java.nio.file.Path;
4448
import java.util.Optional;
4549
import java.util.function.Supplier;
4650

@@ -186,15 +190,34 @@ private void redownloadAssetIndex() {
186190
}
187191

188192
private void clearLibraries() {
189-
FileUtils.deleteDirectoryQuietly(getProfile().getRepository().getBaseDirectory().resolve("libraries"));
193+
var libraries = getProfile().getRepository().getBaseDirectory().resolve("libraries");
194+
Task.runAsync(Schedulers.io(), () -> {
195+
FileUtils.deleteDirectoryQuietly(libraries);
196+
}).whenComplete(Schedulers.javafx(), (exception) -> {
197+
if (exception != null) {
198+
Controllers.dialog(i18n("message.failed") + "\n" + StringUtils.getStackTrace(exception), i18n("message.error"), MessageDialogPane.MessageType.ERROR);
199+
}
200+
}).start();
190201
}
191202

192203
private void clearAssets() {
193-
HMCLGameRepository baseDirectory = getProfile().getRepository();
194-
FileUtils.deleteDirectoryQuietly(baseDirectory.getBaseDirectory().resolve("assets"));
195-
if (version.get() != null) {
196-
FileUtils.deleteDirectoryQuietly(baseDirectory.getRunDirectory(version.get().getVersion()).resolve("resources"));
197-
}
204+
Path assetsDir = getProfile().getRepository().getBaseDirectory().resolve("assets");
205+
206+
Profile.ProfileVersion currentVersion = version.get();
207+
Path resourcesDir = currentVersion != null
208+
? getProfile().getRepository().getRunDirectory(currentVersion.getVersion()).resolve("resources")
209+
: null;
210+
211+
Task.runAsync(Schedulers.io(), () -> {
212+
FileUtils.deleteDirectoryQuietly(assetsDir);
213+
if (resourcesDir != null) {
214+
FileUtils.deleteDirectoryQuietly(resourcesDir);
215+
}
216+
}).whenComplete(Schedulers.javafx(), (exception) -> {
217+
if (exception != null) {
218+
Controllers.dialog(i18n("message.failed") + "\n" + StringUtils.getStackTrace(exception), i18n("message.error"), MessageDialogPane.MessageType.ERROR);
219+
}
220+
}).start();
198221
}
199222

200223
private void clearJunkFiles() {

0 commit comments

Comments
 (0)