2009-07-15 40 views
5

在我的應用程序中,我希望用戶能夠選擇一個目錄來存儲東西。我有一個文本字段,我正在使用它來顯示目錄,已經選擇。如果他們只是點擊一個目錄(不要瀏覽它),一切都很好。但是,如果他們雙擊目錄並查看它,目錄名稱將被複制。從目錄返回的路徑的一部分僅JFileChooser有時被複制

Ex。他們在主目錄中,單擊文件夾Desktop ...返回的路徑是〜/ Desktop。另一方面,如果它們位於主目錄中,請雙擊文件夾Desktop,現在位於Desktop文件夾中,返回的路徑是〜/ Desktop/Destkop。

下面是我在做什麼:

JFileChooser chooser = new JFileChooser(); 
chooser.setMultiSelectionEnabled(false); 
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
int returnVal = chooser.showOpenDialog(this); 

if (returnVal == JFileChooser.APPROVE_OPTION) { 
    File f = chooser.getSelectedFile(); 
    loadField.setText(f.getPath()); 
} 

我也試着做這樣的事情chooser.getCurrentDirectory(),但並沒有真正工作,要麼。

編輯:使用Mac OS X,Java 1.6

+1

你在什麼操作系統和Java版本? – akf 2009-07-15 22:27:18

+0

Mac Java在很多方面都很麻煩。您應該向Sun提交錯誤報告?你也可以嘗試OpenJDK 6/Java 7? – akarnokd 2009-07-15 22:34:26

回答

3

似乎適合我。

import javax.swing.JFileChooser; 

public class FChoose { 
    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { public void run() { 
      JFileChooser chooser = new JFileChooser(); 
      chooser.setMultiSelectionEnabled(false); 
      chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
      int returnVal = chooser.showOpenDialog(null); 

      if (returnVal == JFileChooser.APPROVE_OPTION) { 
       java.io.File f = chooser.getSelectedFile(); 
       System.err.println(f.getPath()); 
      } 
     }}); 
    } 
} 

在Vista上的6u13。你的設置有什麼奇怪的或你在做什麼?

如果在Java的Mac OS X實現中存在特定的錯誤,則可能需要檢查該文件是否存在,以及是否忽略了最後一個元素的路徑。

1

當您使用chooser.showDialog或chooser.showSaveDialog而不是chooser.showOpenDialog時,會發生此問題。在XP中,chooser.showDialog返回OP提供的示例下的正確路徑,但在Mac OS 10.5.7(以及可能更早的版本)中,您將獲得〜/ Desktop/Desktop。 (在我的情況下,我需要使用showSaveDialog,因爲我希望用戶可以選擇創建一個新文件夾,所以看起來我必須手動去重複路徑。它肯定看起來像這是Apple中的一個錯誤Java實現。)

相關問題