Java Swing JFileChooser和user.home系统变量
我正在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版本相同,为什么对他和我来说会有所不同 以下是我的合作来源: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。但是,当我仔细
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实现中被覆盖,但事实似乎确实如此。