2009-07-15 7 views
5

W mojej aplikacji chcę, aby użytkownik mógł wybrać katalog do przechowywania rzeczy. Mam pole tekstowe, którego używam do wyświetlania katalogu, który oni " wybrano ve. Jeśli po prostu klikną na katalog (nie przeglądaj go), wszystko jest w porządku. Jeśli jednak dwukrotnie klikną katalog i zajrzą do niego, nazwa katalogu zostanie zduplikowana.Część ścieżki zwrócona z Katalogów Tylko JFileChooser jest czasami powielana

Przykł. Znajdują się w katalogu domowym, wystarczy jedno kliknięcie na folder Pulpit ... zwrócona ścieżka to ~/Desktop. Z drugiej strony, jeśli znajdują się w katalogu domowym, kliknij dwukrotnie folder Pulpit, a teraz znajdują się w folderze Pulpit, zwrócona ścieżka to ~/Desktop/Destkop.

Oto co robię:

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

Próbowałem też zrobić coś jak chooser.getCurrentDirectory() ale to naprawdę nie działa.

Edit: Korzystanie z systemu Mac OS X, Java 1.6

+1

z której wersji systemu operacyjnego i Java korzystasz? – akf

+0

Mac Java ma wiele problemów. Powinieneś przesłać raport o błędzie do Sun? Możesz także wypróbować OpenJDK 6/Java 7? – akarnokd

+0

Apple odpowiada za ich implementację Java. Błędy związane z implementacją Apple powinny, jak sądzę, zostać przesłane do Apple. –

Odpowiedz

3

wydaje się działać dla mnie.

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

6u13 na Vista. Czy jest coś dziwnego w twojej konfiguracji lub w tym, co robisz?

Jeśli istnieje konkretny błąd w implementacji środowiska Java w systemie Mac OS X, możesz na przykład sprawdzić, czy plik istnieje, a jeśli nie, odinstaluj ostatnie elementy ścieżki.

+0

samo ver na XP, sam wynik dodatni. – akf

+0

Edytowane powyżej, ale używam Mac OS X i Java 1.6. – knt

+0

I masz ten sam problem z moim pełnym przykładem? –

1

Problem występuje, gdy używasz opcji Chooser.showDialog lub Chooser.showSaveDialog zamiast Chooser.showOpenDialog. Na XP chooser.showDialog zwraca poprawną ścieżkę w przykładzie podanym przez OP, ale na Mac OS 10.5.7 (i prawdopodobnie również w starszych wersjach) otrzymasz ~/Desktop/Desktop. (W moim przypadku muszę użyć showSaveDialog, ponieważ chcę, aby użytkownicy mieli możliwość utworzenia nowego folderu, więc wygląda na to, że będę musiał ręcznie usunąć ścieżkę ręcznie.Z pewnością wygląda na to, że jest to błąd w Apple Implementacja Java.)

Powiązane problemy