JFileChooser在OS X中返回错误的路径(仅文件夹模式)

Vir*_*aru 3 java macos swing jfilechooser

我在java swing中有一个问题,用户必须选择一个文件夹,所以我使用下面的代码.

JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

if(fc.showDialog(singleton, SELECT) == JFileChooser.APPROVE_OPTION) {
  File folder = fc.getSelectedFile();
  String path = folder.getPath() + File.separatorChar + MYAPPFOLDER;
}
Run Code Online (Sandbox Code Playgroud)

现在,用户可以通过两种方式选择文件夹

  1. 导航到该文件夹​​并选择该文件夹
  2. 导航到该文件夹​​,进入该文件夹,然后单击"选择"

两种方式在Windows上运行良好,但在OS X上,我得到了

如果我做1: path = Users/<username>/Desktop/MYAPPFOLDER

如果我做2: path = Users/<username>/Desktop/Desktop/MYAPPFOLDER

我该如何避免第二种情况?

提前致谢.

Pat*_*ace 6

问题是showDialog不知道这是一个加载还是保存操作,因此它为您提供了将文件/文件夹名称放入的文本框.当您单击要进入的文件夹时,这将设置为"桌面"它(作为双击的第一次单击)并且如果用户然后按下SELECT,则该对话框假定您要创建具有该名称的新文件夹并将其返回到路径中.

一种解决方案是使用showOpenDialog调用,并手动将选择器的标题和批准按钮更改为SELECT.这样,用户永远不会看到新目录文本框.

代码看起来像这样:

JFileChooser fc = new JFileChooser();
fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

fc.setDialogTitle("Select a folder");
fc.setApproveButtonText(SELECT);
if(fc.showOpenDialog(singleton) == JFileChooser.APPROVE_OPTION) {
  File folder = fc.getSelectedFile();
  String path = folder.getPath() + File.separatorChar + "MYAPPFOLDER";
}
Run Code Online (Sandbox Code Playgroud)