Skip to content

Commit d820a2e

Browse files
KingRabbidFSchumacher
authored andcommitted
fix: Fix File->Open recent showing old files across multiple JVMs
Closes #6509
1 parent 94c94b7 commit d820a2e

3 files changed

Lines changed: 42 additions & 0 deletions

File tree

src/core/src/main/java/org/apache/jmeter/gui/action/LoadRecentProject.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@
2727
import java.util.List;
2828
import java.util.Objects;
2929
import java.util.Set;
30+
import java.util.prefs.BackingStoreException;
3031
import java.util.prefs.Preferences;
3132
import java.util.stream.Collectors;
3233
import java.util.stream.IntStream;
3334

3435
import javax.swing.JComponent;
3536
import javax.swing.JMenuItem;
3637

38+
import org.slf4j.Logger;
39+
import org.slf4j.LoggerFactory;
40+
3741
import com.google.auto.service.AutoService;
3842

3943
/**
@@ -47,6 +51,7 @@ public class LoadRecentProject extends Load {
4751
/** The number of menu items used for recent files */
4852
private static final int NUMBER_OF_MENU_ITEMS = 9;
4953
private static final Set<String> commands = new HashSet<>();
54+
private static final Logger log = LoggerFactory.getLogger(LoadRecentProject.class);
5055

5156
static {
5257
commands.add(ActionNames.OPEN_RECENT);
@@ -89,6 +94,11 @@ private static File getRecentFile(ActionEvent e) {
8994
* @return a List of JMenuItem, representing recent files. JMenuItem may not be visible
9095
*/
9196
public static List<JComponent> getRecentFileMenuItems() {
97+
try {
98+
prefs.sync();
99+
} catch (BackingStoreException e) {
100+
log.warn("Unable to sync preferences for recent files", e);
101+
}
92102
List<JComponent> menuItems = new ArrayList<>();
93103
// Get the preference for the recent files
94104
for(int i = 0; i < NUMBER_OF_MENU_ITEMS; i++) {
@@ -223,6 +233,11 @@ public static String getRecentFile(int index) {
223233
*/
224234
private static void setRecentFile(int index, String fileName) {
225235
prefs.put(USER_PREFS_KEY + index, fileName);
236+
try {
237+
prefs.flush();
238+
} catch (BackingStoreException e) {
239+
log.warn("Unable to flush preferences for recent files", e);
240+
}
226241
}
227242

228243
private static void removeRecentFile(int index) {

src/core/src/main/java/org/apache/jmeter/gui/util/JMeterMenuBar.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import javax.swing.MenuElement;
4040
import javax.swing.UIManager;
4141
import javax.swing.UIManager.LookAndFeelInfo;
42+
import javax.swing.event.MenuEvent;
43+
import javax.swing.event.MenuListener;
4244

4345
import org.apache.jmeter.gui.GuiPackage;
4446
import org.apache.jmeter.gui.action.ActionNames;
@@ -530,6 +532,30 @@ private void makeFileMenu() {
530532
fileLoadRecentFiles.forEach(jc -> recentFilesOpen.add(jc));
531533
recentFilesOpen.setEnabled(LoadRecentProject.hasVisibleMenuItem(fileLoadRecentFiles));
532534

535+
// Add menu listener to refresh recent files when menu is selected
536+
recentFilesOpen.addMenuListener(new MenuListener() {
537+
@Override
538+
public void menuSelected(MenuEvent e) {
539+
// Clear existing recent files from menu
540+
recentFilesOpen.removeAll();
541+
542+
// Reload recent files
543+
fileLoadRecentFiles = LoadRecentProject.getRecentFileMenuItems();
544+
fileLoadRecentFiles.forEach(jc -> recentFilesOpen.add(jc));
545+
recentFilesOpen.setEnabled(LoadRecentProject.hasVisibleMenuItem(fileLoadRecentFiles));
546+
}
547+
548+
@Override
549+
public void menuDeselected(MenuEvent e) {
550+
// Not needed
551+
}
552+
553+
@Override
554+
public void menuCanceled(MenuEvent e) {
555+
// Not needed
556+
}
557+
});
558+
533559
addPluginsMenuItems(fileMenu, menuCreators, MENU_LOCATION.FILE);
534560

535561
// When JMeter menu is integrated with macOS system menu, there's no need in extra "exit"

xdocs/changes.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ Summary
7070
<li><issue>6352</issue> Calculate delays in Open Model Thread Group and Precise Throughput
7171
Timer relative to start of Thread Group instead of the start of the test.</li>
7272
<li><issue>6357</issue><pr>6358</pr> Ensure writable directories when copying template files while report generation.</li>
73+
<li><pr>6509</pr><pr>6675</pr> Synchronize recent file menu across multiple JVMs. Contributed by Corneliu C (https://github.com/KingRabbid)</li>
7374
</ul>
7475

7576
<h3>HTTP Samplers and Test Script Recorder</h3>

0 commit comments

Comments
 (0)