JfileChooser忽略OS X上的特殊字符文件夹

时间:2013-07-12 10:17:11

标签: java macos javafx jfilechooser

我有一个Java程序浏览本地文件系统的路径,为此我们使用了JFileChooser。如果文件夹名称是简单的英语在Windows,Mac OS X和Linux上正常工作。但是,如果我创建名为“ábcEóz的特殊字符的文件夹,那么它仅在Windows和Linux上显示特殊字符名称,但在OS X上我无法看到这些特殊字符文件夹。它会从文件夹列表中忽略它们。

我的程序基于java 7 update 21构建。 Mac OS X版本 - 10.8.2

我该如何解决这个问题?

由于

更新:我们正在使用JavaFX打包为Mac创建应用。当我们直接运行app.jar时,它会显示包含特殊字符的路径。但是如果我们尝试使用app启动应用程序,那么它会跳过那些特殊的char文件夹。

2 个答案:

答案 0 :(得分:2)

我刚试了一个样本:

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;

public class Trial {
    public static void main(String... args) {
        JFrame frame = new JFrame("FrameDemo");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel emptyLabel = new JLabel();

        frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);

        frame.pack();

        frame.setVisible(true);

        JFileChooser chooser = new JFileChooser();
        FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
        chooser.setFileFilter(filter);
        int returnVal = chooser.showOpenDialog(frame);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            System.out.println("You chose to open this file: " +
                    chooser.getSelectedFile().getName());
        }
    }
}
运行OS X 10.9.1的{​​{1}}上的

。我创建了以下文件夹层次结构:JDK 1.7.0_51enter image description here

为了解决你所描述的问题,我还安装了你指出的JDK,JDK_1.7.0_25,我设法重现同样的问题,这是运行u25 enter image description here的同一个窗口的快照

可以看到包含特殊字符的文件夹不显示。所以我也查了一下 JDK 1.7.0_40和惊喜 - 它的工作原理。之后,我查看了给定版本中修复的bugs,我发现在此版本中修复了几个与mac os x相关的错误。其中一对(7024118,7032018,7032436,7161437)引用了JFileChooser中的问题。还有其他与mac相关的问题(总共45个),其中一个涉及FileDialog。不幸的是,错误描述的链接不起作用,所以我不能发布关于这个主题的更多信息,但你的问题的解决方案肯定是更新到至少版本1.7.0_40,即使我认为最好的是更新到最新的(1.7.0_51)。

祝你工作顺利。我希望这可以帮助你。

答案 1 :(得分:0)

当我们使用JavaFX打包构建应用程序时,我们将自定义的 Info.plist 保存在本地路径的 .. buildscript_path / package / macosx / 文件夹中。

通过向Info.plist添加以下键,可以解决忽略特殊字符的问题。

 <key>LSEnvironment</key>
 <dict>
    <key>LANG</key>
    <string>en_US.UTF-8</string>
 </dict> 

将这行代码添加到info.plist中,然后构建应用程序解决了我的问题。

由于