2009-07-15 10 views
5

Nella mia applicazione, voglio che l'utente sia in grado di selezionare una directory in cui archiviare i dati. Ho un campo di testo che sto usando per visualizzare la directory " hai scelto. Se fanno semplicemente clic su una directory (non sfogliarla), tutto va bene. Tuttavia, se fanno doppio clic sulla directory e guardano al suo interno, il nome della directory viene duplicato.Parte del percorso restituita dalle directory Solo JFileChooser è talvolta duplicato

Es. Sono nella directory home, fai clic sulla cartella Desktop ... il percorso restituito è ~/Desktop. D'altra parte, se si trovano nella directory home, fare doppio clic sulla cartella Desktop e ora si trovano nella cartella Desktop, il percorso restituito è ~/Desktop/Destkop.

Ecco quello che sto facendo:

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

Ho anche provato a fare qualcosa di simile chooser.getCurrentDirectory() ma che in realtà non funziona neanche.

Edit: L'utilizzo di Mac OS X, Java 1.6

+1

quale versione di sistema operativo e Java è attiva? – akf

+0

Mac Java è tormentato in molti modi. Dovresti forse inviare una segnalazione di bug a Sun? Potresti provare anche OpenJDK 6/Java 7? – akarnokd

+0

Apple è responsabile della loro implementazione Java. I bug specifici per l'implementazione di Apple dovrebbero, credo, essere inviati ad Apple. –

risposta

3

sembra funzionare per me.

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 su Vista. C'è qualcosa di strano nella tua configurazione o in quello che stai facendo?

Se c'è un bug specifico in un'implementazione di Java di Mac OS X, è possibile, ad esempio, controllare se il file esiste e se non de-dupe l'ultimo agli elementi del percorso.

+0

same ver su XP, stesso risultato positivo. – akf

+0

Modificato sopra, ma sto usando Mac OS X e Java 1.6. – knt

+0

E si ottiene lo stesso problema con il mio esempio completo? –

1

Il problema si verifica quando si utilizza chooser.showDialog o chooser.showSaveDialog anziché chooser.showOpenDialog. In XP chooser.showDialog restituisce il percorso corretto nell'esempio fornito dall'OP, ma su Mac OS 10.5.7 (e probabilmente anche nelle versioni precedenti) otterrai ~/Desktop/Desktop. (Nel mio caso ho bisogno di usare showSaveDialog perché voglio che gli utenti abbiano la possibilità di creare una nuova cartella, quindi sembra che dovrò de-duplicare il percorso manualmente. È certo che questo è un bug nella Apple Implementazione Java.)

Problemi correlati