Skip to content

Commit 137b81f

Browse files
committed
Fix Swing race condition
1 parent dbd25e5 commit 137b81f

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

src/main/java/club/bytecode/the/jda/gui/fileviewer/DecompileThread.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,30 +45,34 @@ public void run() {
4545
decompiler.applyFilters(cn);
4646
decompileResult = decompiler.decompileClassNode(viewer.getFile().container, cn);
4747
}
48-
4948
String text = stripUndisplayableChars(decompileResult);
50-
RSyntaxTextArea panelArea;
51-
if (decompiler instanceof BytecodeDecompiler) {
52-
panelArea = new BytecodeSyntaxArea(text);
53-
} else {
54-
panelArea = new JDATextArea(text);
55-
}
5649

57-
final RTextScrollPane scrollPane = new RTextScrollPane(panelArea);
58-
StringBuilder topLabelText = new StringBuilder(decompiler.getName());
59-
for (DecompileFilter filter : decompiler.getSettings().getEnabledFilters()) {
60-
topLabelText.append(" + ").append(filter.getName());
61-
}
62-
scrollPane.setColumnHeaderView(new JLabel(topLabelText.toString()));
63-
SwingUtilities.invokeLater(() -> target.add(scrollPane));
64-
viewer.updatePane(paneId, panelArea, decompiler);
50+
SwingUtilities.invokeLater(() -> {
51+
RSyntaxTextArea panelArea;
52+
if (decompiler instanceof BytecodeDecompiler) {
53+
panelArea = new BytecodeSyntaxArea(text);
54+
} else {
55+
panelArea = new JDATextArea(text);
56+
}
57+
58+
final RTextScrollPane scrollPane = new RTextScrollPane(panelArea);
59+
StringBuilder topLabelText = new StringBuilder(decompiler.getName());
60+
for (DecompileFilter filter : decompiler.getSettings().getEnabledFilters()) {
61+
topLabelText.append(" + ").append(filter.getName());
62+
}
63+
scrollPane.setColumnHeaderView(new JLabel(topLabelText.toString()));
64+
target.add(scrollPane);
65+
viewer.updatePane(paneId, panelArea, decompiler);
66+
});
6567
} catch (Exception e) {
6668
new ExceptionUI(e, "decompiling " + viewer.getFile().name);
6769
} finally {
68-
viewer.resetDivider();
69-
JDA.setBusy(false);
70-
if (button != null)
71-
button.setEnabled(true);
70+
SwingUtilities.invokeLater(() -> {
71+
viewer.resetDivider();
72+
JDA.setBusy(false);
73+
if (button != null)
74+
button.setEnabled(true);
75+
});
7276
}
7377
}
7478

0 commit comments

Comments
 (0)