【问题标题】:JFileChooser ignoring special character folders on OS XJFileChooser 忽略 OS X 上的特殊字符文件夹
【发布时间】:2013-07-10 20:41:27
【问题描述】:

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

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

我该如何解决这个问题?

谢谢

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

【问题讨论】:

  • 你试过上面提到的帖子中提到的-Dfile.encoding=UTF-8吗?
  • @ShadowCreeper 我没有注意到提到 -Dfile.encoding=UTF-8 的问题之一中的评论,我回家后会尝试。我应该把那个命令放在哪里?它是启动JVM时的参数还是应该放在我的代码中的某个地方?
  • @AdamSmith 是的,这是一个 JVM 参数。

标签: java macos javafx jfilechooser


【解决方案1】:

我只是尝试了一个示例:

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 上运行 JDK 1.7.0_51。我创建了以下文件夹层次结构:~/Documents/Joyeux Naufragés/ábc Eóz:。

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

可以看到包含特殊字符的文件夹不显示。所以我也检查了 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)。

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

【讨论】:

  • 您好,感谢您的回答。这与我尝试过的类似,但仍然不显示带有特殊字符(如本例中的“é”)的文件夹和文件。我在 OS X 10.9.1 上运行 jdk1.7.0_25。
  • @AdamSmith - 感谢您的反馈,这就是我一直在等待的诚实。
【解决方案2】:

当我们使用 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,所以这个解决方案对我不起作用。不过,感谢您的回答,它可能对其他人有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多