From f354f7de639d8a829ad69bdf5581e312daf47b67 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 11 Feb 2023 14:01:31 +0000 Subject: [PATCH] fix(gui): split tabs loading to prevent ui dead lock --- .../src/main/java/jadx/gui/ui/MainWindow.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java index 87c04bb3c..e6bea223a 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java @@ -532,9 +532,11 @@ public class MainWindow extends JFrame { updateLiveReload(project.isEnableLiveReload()); BreakpointManager.init(project.getFilePaths().get(0).toAbsolutePath().getParent()); + List openTabs = project.getOpenTabs(this); backgroundExecutor.execute(NLS.str("progress.load"), - this::restoreOpenTabs, + () -> preLoadOpenTabs(openTabs), status -> { + restoreOpenTabs(openTabs); runInitialBackgroundJobs(); notifyLoadListeners(true); }); @@ -1503,8 +1505,8 @@ public class MainWindow extends JFrame { project.saveOpenTabs(tabbedPane.getEditorViewStates(), tabbedPane.getSelectedIndex()); } - private void restoreOpenTabs() { - List openTabs = project.getOpenTabs(this); + private void restoreOpenTabs(List openTabs) { + UiUtils.uiThreadGuard(); if (openTabs.isEmpty()) { return; } @@ -1518,6 +1520,18 @@ public class MainWindow extends JFrame { } } + private void preLoadOpenTabs(List openTabs) { + UiUtils.notUiThreadGuard(); + for (EditorViewState tabState : openTabs) { + JNode node = tabState.getNode(); + try { + node.getCodeInfo(); + } catch (Exception e) { + LOG.warn("Failed to preload code for node: {}", node, e); + } + } + } + private void saveSplittersInfo() { settings.setMainWindowVerticalSplitterLoc(verticalSplitter.getDividerLocation()); settings.setDebuggerStackFrameSplitterLoc(debuggerPanel.getLeftSplitterLocation());