2
String path = workspaceField.getText();

        //prefs.remove("workspaceDirectory");
        prefs.put("workspaceDirectory", path); 

        splitPane = commands.getSplitPane();
        WebScrollPane oldTree = (WebScrollPane) splitPane.getLeftComponent();
        splitPane.remove(oldTree);

        WebScrollPane newTree = commands.createFileTree();
        splitPane.setLeftComponent(newTree);
        dialog.dispose();

上面的代码从文本字段中获取文件路径,然后将其放入名为“workspaceDirectory”的字符串首选项中。问题是这种偏好不会改变。注释的 prefs.remove 调用成功删除了首选项,但在调用 prefs.put("workspaceDirectory", path) 时它不会更改首选项。我没有收到任何错误。

方法 createFileTree():

public WebScrollPane createFileTree() {
    fileTree = new WebFileTree(prefs.get("workspaceDirectory", WorkspaceManager.createWorkspaceDirectory()));
    fileTreeScrollPane = new WebScrollPane(fileTree);   
    fileTreeScrollPane.setVerticalScrollBarPolicy(WebScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    fileTree.addMouseListener(new FileTreeListener(this));
    return fileTreeScrollPane;
}

这就是 createFileTree 所做的一切,但它不会影响任何东西。如果我将更改组件的代码注释掉,那么 prefs.put 什么也不做。任何想法是什么导致了这种情况或阻止了偏好的改变?

4

1 回答 1

3

从 javadoc 为java.util.Preferences

所有修改偏好数据的方法都允许异步操作;它们可能会立即返回,并且更改最终将传播到具有依赖于实现的延迟的持久后备存储。flush 方法可用于同步强制更新后备存储。Java 虚拟机的正常终止不会导致挂起的更新丢失——终止时不需要显式的刷新调用来确保挂起的更新是持久的。

因此,如果您对首选项进行更改,然后立即尝试阅读该更改,您的结果可能不是您所期望的。

于 2013-03-18T19:32:01.750 回答