Java JFileChooser没有';t在OSX 10.7上返回完整文件名

Java JFileChooser没有';t在OSX 10.7上返回完整文件名,java,macos,swing,jfilechooser,Java,Macos,Swing,Jfilechooser,问题是JFileChooser返回的File对象的文件名不完整。更确切地说,它返回的文件名不包含文件扩展名部分。我尝试使用getPath、getAbsolutePath和getCanonicalPath检索路径,但它仍然返回相同的路径,没有扩展部分。同样的程序和代码在Windows、Linux和OSX 10.6上运行良好 该问题出现在OSX 10.7.4和Java SE 10.6.0_33-b03-424上。有人知道这方面的解决办法吗,或者至少能证实这一点吗 编辑: 我还注意到一件非常有趣的事情

问题是
JFileChooser
返回的
File
对象的文件名不完整。更确切地说,它返回的文件名不包含文件扩展名部分。我尝试使用
getPath
getAbsolutePath
getCanonicalPath
检索路径,但它仍然返回相同的路径,没有扩展部分。同样的程序和代码在Windows、Linux和OSX 10.6上运行良好

该问题出现在OSX 10.7.4和Java SE 10.6.0_33-b03-424上。有人知道这方面的解决办法吗,或者至少能证实这一点吗

编辑:

我还注意到一件非常有趣的事情,它可以正确地用于某些文件,在Finder中具有可见扩展名的文件,但对于那些Finder没有显示扩展名的文件,它会失败。通过在bash终端中执行
ls
,我检查了这些文件是否确实有扩展名

编辑2:


在Finder中打开“显示所有文件扩展名”后,JFileChooser开始返回扩展名为的文件名。这看起来像是JFileChooser底层实现中的设计错误。这并不能真正帮助解决问题,因为在我的例子中,这是一款面向普通用户的消费品。

我更新了代码中的一些部分,并得到以下输出:

C:\Users\Arno\Documents\My Games\Skyrim\renderinfo.txt C:\Users\Arno\Documents\My Games\Skyrim\renderinfo.txt RenderInfo.txt C:\Users\Arno\Documents\My Games\Skyrim\renderinfo.txt

以下是更新的代码:

JFileChooser myImageChooser = new JFileChooser();
    myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int val = myImageChooser.showDialog(null, "Select Image");

    if (val == JFileChooser.APPROVE_OPTION) {
        File f = myImageChooser.getSelectedFile();
        System.err.println(myImageChooser.getSelectedFile()
                .getAbsolutePath());
        try {
            System.err.println(myImageChooser.getSelectedFile()
                    .getCanonicalPath());
        } catch (IOException ex) {

        }
        System.err.println(myImageChooser.getSelectedFile().getName());
        System.err.println(myImageChooser.getSelectedFile().getPath());

        // loadImage(f);
        // Util.event("LoadImage", f.getName());
    }
}

我更新了代码中的某些部分,并得到以下输出:

C:\Users\Arno\Documents\My Games\Skyrim\renderinfo.txt C:\Users\Arno\Documents\My Games\Skyrim\renderinfo.txt RenderInfo.txt C:\Users\Arno\Documents\My Games\Skyrim\renderinfo.txt

以下是更新的代码:

JFileChooser myImageChooser = new JFileChooser();
    myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int val = myImageChooser.showDialog(null, "Select Image");

    if (val == JFileChooser.APPROVE_OPTION) {
        File f = myImageChooser.getSelectedFile();
        System.err.println(myImageChooser.getSelectedFile()
                .getAbsolutePath());
        try {
            System.err.println(myImageChooser.getSelectedFile()
                    .getCanonicalPath());
        } catch (IOException ex) {

        }
        System.err.println(myImageChooser.getSelectedFile().getName());
        System.err.println(myImageChooser.getSelectedFile().getPath());

        // loadImage(f);
        // Util.event("LoadImage", f.getName());
    }
}

这似乎是finder的一个特性

如果我在Finder中关闭了扩展隐藏,我会得到扩展,如果我在Finder中打开扩展隐藏,我不会


查看如何在两者之间切换这似乎是finder的一项功能

如果我在Finder中关闭了扩展隐藏,我会得到扩展,如果我在Finder中打开扩展隐藏,我不会


查看如何在两者之间切换

我怀疑Apple JVM中是否存在如此严重的问题。你能发布一个完整的例子来重现这个问题吗?愚蠢的问题,但是,你确定你选择的文件有一个扩展名吗?@Guillaume Polet请参阅我的编辑以获得半完整的示例,是的,文件扩展名显示在终端(目录列表)中,但不显示在OSX的Finder程序中。在我看来,这应该不是问题,windows默认情况下也不会在资源管理器中显示文件扩展名。我想知道如果有两个文件具有相同的名称和不同的(不可见)扩展名,会发生什么情况。这两个文件被认为是相同的吗?我知道这听起来很愚蠢,但是,你能验证你正在选择的文件是否有扩展名(到终端去看一看)并且该文件确实不是一个文件吗folder@GuillaumePolet可以在操作系统上正常工作,JFileChooser显示两个同名文件,然后返回相同的名称(没有扩展名)两个文件。我怀疑Apple JVM中是否存在如此严重的问题。你能发布一个完整的示例来重现这个问题吗?愚蠢的问题,但是,你确定你选择的文件有扩展名吗?@Guillaume Polet请查看我的编辑以获得半完整的示例,是的,文件扩展名显示在终端中(目录列表),但不在OSX的Finder程序中。在我看来,这应该不是问题,windows默认情况下也不会在资源管理器中显示文件扩展名。我想知道如果有两个同名不同(不可见)的文件会发生什么情况扩展名。这两个文件被认为是相同的吗?我知道这听起来很愚蠢,但是,您能验证您选择的文件是否有扩展名(转到终端并查看)而且这个文件真的不是一个folder@GuillaumePolet与操作系统配合良好,JFileChooser显示两个同名文件,然后返回两个文件的相同名称(无扩展名)。您的输出显然来自Windows操作系统:)此问题仅在Mac上发生OSX@ArnoOP表示它可以在Windows上运行。他的问题似乎与MacOSX 10.7和Java6有直接联系。:)是的,我使用的是windows pc,对不起,我会寻求更多;)您的输出显然来自Windows操作系统:)问题只发生在Mac上OSX@ArnoOP表示它可以在Windows上运行。他的问题似乎与MacOSX 10.7和Java6有直接联系。:)是的,我使用的是windows pc,对不起,我会寻求更多;)这很烦人,我可以重复你的结果,打开扩展隐藏开关,现在我总是得到扩展。这很烦人,我可以重复你的结果,打开扩展隐藏开关,现在我总是得到扩展