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

プリファレンスデータを変更するすべてのメソッドは、非同期で動作することが許可されています。それらはすぐに戻る可能性があり、変更は最終的に実装に依存する遅延を伴って永続的なバッキングストアに伝播します。フラッシュ方式を使用して、バッキングストアへの更新を同期的に強制することができます。Java仮想マシンを正常に終了しても、保留中の更新が失われることはありません。保留中の更新が永続的になるようにするために、終了時に明示的なフラッシュ呼び出しは必要ありません。

したがって、設定を変更してすぐにその変更を読み込もうとすると、期待どおりの結果が得られない可能性があります。

于 2013-03-18T19:32:01.750 に答える