Java 仅JFileChooser从目录返回的部分路径有时会重复

Java 仅JFileChooser从目录返回的部分路径有时会重复,java,swing,jfilechooser,Java,Swing,Jfilechooser,在我的应用程序中,我希望用户能够选择一个目录来存储内容。我有一个文本字段,用来显示他们选择的目录。如果他们只是点击一个目录(不要浏览),一切都很好。但是,如果他们双击目录并查看其内部,则目录名会重复 他们在主目录中,单击文件夹桌面…返回的路径是~/Desktop。另一方面,如果它们在主目录中,双击桌面文件夹,现在在桌面文件夹中,返回的路径是~/Desktop/Destkop 以下是我正在做的: JFileChooser chooser = new JFileChooser(); chooser.

在我的应用程序中,我希望用户能够选择一个目录来存储内容。我有一个文本字段,用来显示他们选择的目录。如果他们只是点击一个目录(不要浏览),一切都很好。但是,如果他们双击目录并查看其内部,则目录名会重复

他们在主目录中,单击文件夹桌面…返回的路径是~/Desktop。另一方面,如果它们在主目录中,双击桌面文件夹,现在在桌面文件夹中,返回的路径是~/Desktop/Destkop

以下是我正在做的:

JFileChooser chooser = new JFileChooser();
chooser.setMultiSelectionEnabled(false);
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = chooser.showOpenDialog(this);

if (returnVal == JFileChooser.APPROVE_OPTION) {
    File f = chooser.getSelectedFile();
    loadField.setText(f.getPath());
}
我也尝试过做一些类似于
chooser.getCurrentDirectory()
的事情,但也没有真正起作用

编辑:使用MacOSX,Java1.6似乎适合我

import javax.swing.JFileChooser;

public class FChoose {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
            JFileChooser chooser = new JFileChooser();
            chooser.setMultiSelectionEnabled(false);
            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            int returnVal = chooser.showOpenDialog(null);

            if (returnVal == JFileChooser.APPROVE_OPTION) {
                java.io.File f = chooser.getSelectedFile();
                System.err.println(f.getPath());
            }
        }});
    }
}
Vista上的6u13。你的设置或你正在做的事情是否有些奇怪


如果Java的Mac OS X实现中存在特定错误,您可能需要检查文件是否存在,如果不存在,则将最后一个重复数据消除到路径的元素。

当您使用chooser.showDialog或chooser.showSaveDialog而不是chooser.showOpenDialog时,会出现问题。在XP chooser.showDialog上,返回OP给出的示例下的正确路径,但在Mac OS 10.5.7(可能还有更早的版本)上,您将得到~/Desktop/Desktop。(在我的例子中,我需要使用showSaveDialog,因为我希望用户可以选择创建一个新文件夹,所以看起来我必须手动对路径进行重复数据消除。这看起来确实是Apple Java实现中的一个错误。)

您使用的是什么操作系统和Java版本?Mac Java在很多方面都存在问题。你也许应该向Sun提交一份bug报告?您也可以尝试OpenJDK 6/Java 7?苹果负责其Java实现。我相信,特定于苹果实现的bug应该被发送到苹果。XP上的相同版本,相同的积极结果。上面编辑过,但我使用的是Mac OS X和Java 1.6。我的完整示例也有同样的问题?好吧,事实上我现在觉得自己像个白痴……使用你的示例,现在效果很好。我想我实际上在自己的代码中使用了错误的对话框类型,但在编写问题时复制了错误的对话框类型。很抱歉浪费了你的时间,谢谢你的帮助。哦,每个人都会犯错!我对你在实际使用的代码中犯的错误感兴趣。