JFileChooser在OS X上忽略特殊字符文件夹

8

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

我的程序是基于Java 7更新21版本构建的。 Mac OS X版本-10.8.2

我如何解决这个问题?

谢谢

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


相关:http://stackoverflow.com/questions/14072619/jfilechooser-on-mac-cannot-see-files-named-by-chinese-chars和https://dev59.com/FXI_5IYBdhLWcg3wDOrW - Jayan
你是否尝试过在上述引用的帖子中提到的-Dfile.encoding=UTF-8 - Shadow Man
@ShadowCreeper 我没有注意到一个问题中提到的-Dfile.encoding=UTF-8的评论,我回家后会尝试一下。我应该把这个命令放在哪里?它是在启动JVM时的参数还是应该放在我的代码中的某个地方? - Jumbala
@AdamSmith 是的,它是一个JVM参数。 - Shadow Man
2个回答

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());
        }
    }
}

在运行JDK 1.7.0_51的OS X 10.9.1上,我创建了以下文件夹层次结构:~/Documents/Joyeux Naufragés/ábc Eózenter image description here。为解决您描述的问题,我还安装了您指出的JDK,即JDK_1.7.0_25,我成功复制了相同的问题,并附上了运行u25的窗口的快照enter image description here。正如你所看到的,包含特殊字符的文件夹不显示。因此,我还使用了JDK 1.7.0_40并惊讶地发现它有效。之后,我查阅了该版本中修复的错误,发现这个版本修复了与mac os x相关的几个错误,其中有几个(7024118、7032018、7032436、7161437)是关于JFileChooser的问题。还有其他与mac相关的问题(总共45个),其中一个是FileDialog的问题。不幸的是,关于错误描述的链接无法使用,因此我无法在此主题上发布更多信息,但是解决您的问题的方法肯定是至少升级到1.7.0_40版本,即使我认为最好的方法是升级到最新版本(1.7.0_51)。祝您工作顺利。希望这可以帮助你。

嗨,谢谢你的回答。这与我尝试过的类似,但仍然无法显示带有特殊字符(例如此情况下的“é”)的文件夹和文件。我在OS X 10.9.1上运行jdk1.7.0_25。 - Jumbala
@AdamSmith - 感谢您的反馈,说实话这正是我所期待的。 - Olimpiu POP

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中后,构建应用程序解决了我的问题。
谢谢。

当我发布悬赏时,似乎没有注意到问题中的JavaFX标签,也没有想到它实际上会有所不同。我没有在我的应用程序中使用JavaFX,因此这个解决方案对我无效。不过还是谢谢你的回答,对其他人来说可能会很有用。 - Jumbala

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接