Java Swing JFileChooser和user.home系统变量

Java Swing JFileChooser和user.home系统变量,java,swing,Java,Swing,我正在Windows7上运行一个使用JDK1.7.045的Swing应用程序。它使用一个JFileChooser,它使用无参数构造函数创建它,使起始目录成为我的Documents文件夹。我想通过-Duser.home=some dir设置user.home系统变量来更改这个起始目录,而不更改我没有的源代码 在sun.awt.shell.ShellFolderManager中有一段代码应该可以实现这一点,在另一个论坛上,有人声称它对他有效,同样适用于Java 7和Windows 7。但是,当我仔细

我正在Windows7上运行一个使用JDK1.7.045的Swing应用程序。它使用一个JFileChooser,它使用无参数构造函数创建它,使起始目录成为我的Documents文件夹。我想通过-Duser.home=some dir设置user.home系统变量来更改这个起始目录,而不更改我没有的源代码

在sun.awt.shell.ShellFolderManager中有一段代码应该可以实现这一点,在另一个论坛上,有人声称它对他有效,同样适用于Java 7和Windows 7。但是,当我仔细阅读他的源代码示例时,我得到了ShellFolderManager的一个子类,名为sun.awt.shell.win32ShellFolderManager,它的工作方式不同,不看user.home。如果源代码相同,Windows和Java版本相同,为什么对他和我来说会有所不同

以下是我的合作来源:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.io.IOException;

import javax.swing.*;

public class TestFileChooser {
public static void main(final String[] args) throws IOException {
    System.out.println(System.getProperty("user.home"));
    final JFrame frame = new JFrame("Test");
    frame.setSize(300, 200);
    final JFileChooser fileChooser = new JFileChooser();
    final JButton button = new JButton(new AbstractAction() {
        @Override
        public void actionPerformed(final ActionEvent e) {
            fileChooser.showOpenDialog(frame);
        }
    });
    button.setText("Open");
    frame.add(button,BorderLayout.SOUTH);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

}

32或64位差异?是的,可能。我有64位Windows,但我运行的是32位Java。设置Java 64位并看看会发生什么是值得的。不,当使用Java 7,64位编译和运行时,它也会忽略user.home。32位对32位怎么样?我没有32位的Windows机器可以测试。然而,我想在Windows上的所有版本上,JFileChooser都不会查看user.home系统变量来选择默认的起始目录,而说它这样做的人完全错了。奇怪的是,user.home行为在Windows实现中被覆盖,但事实似乎确实如此。