2010-11-12 28 views
1

J'essaye de créer une application Java basée sur la console simple, qui exige que les utilisateurs choisissent des fichiers de leur système de fichiers local.JavaVM Windows 7 64bit - JFileChooser() ne montre pas la boîte de dialogue

La console invite l'utilisateur à sélectionner l'une des options disponibles, puis à activer l'entrée donnée.

public Client() throws UnknownHostException, IOException { 
    printuseroptions(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    char userdecision = br.readLine().charAt(0); 

    System.out.println(userdecision); 

    switch(userdecision){ 
     case '1': 
      System.out.println("Which file would you like to open?"); 
      openfile(br.readLine()); 
      break; 
     case '2': 
      System.out.println("Which file would you like to close?"); 
      closefile(br.readLine()); 
      break; 
     } 

private boolean openfile(String path){ 
    System.out.println("openfile("+path+")"); 
    return false; 
} 

private boolean closefile(String path){ 
    System.out.println("closefile("+path+")"); 
    new JFileChooser().showOpenDialog(null); 
    return false; 
} 

Peu importe ce que je fais, la fenêtre contextuelle JFileChooser ne s'ouvre pas. Aucune erreur est affiché sur la console, mais un débogage étape par montre l'erreur suivante:

Blockquote Thread [main] (Suspended)
ClassNotFoundException(Throwable).(String, Throwable) line: 217
ClassNotFoundException(Exception).(String, Throwable) line: not available ClassNotFoundException.(String) line: not available
URLClassLoader$1.run() line: not available
AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) line: not available [native method]
Launcher$ExtClassLoader(URLClassLoader).findClass(String) line: not available
Launcher$ExtClassLoader.findClass(String) line: not available
Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) line: not available Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available Launcher$AppClassLoader.loadClass(String, boolean) line: not available
Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available
ResourceBundle$RBClassLoader.loadClass(String) line: not available
CoreResourceBundleControl(ResourceBundle$Control).newBundle(String, Locale, String, ClassLoader, boolean) line: not available
ResourceBundle.loadBundle(CacheKey, List, Control, boolean) line: not available ResourceBundle.findBundle(CacheKey, List, List, int, Control, ResourceBundle) line: not available
ResourceBundle.getBundleImpl(String, Locale, ClassLoader, ResourceBundle$Control) line: not available
ResourceBundle.getBundle(String, ResourceBundle$Control) line: not available
Toolkit$3.run() line: not available AccessController.doPrivileged(PrivilegedAction) line: not available [native method]
Toolkit.() line: not available
Component.() line: not available
Client.closefile() line: 90 Client.() line: 60
Client.main(String[]) line: 36

Le même code fonctionne parfaitement sur une machine Linux 32 bits, donc je suppose que le problème est lié de Windows. Le code ci-dessous s'exécute comme prévu sur Windows et Linux donc je soupçonne peut-être être dû aux différentes manières dans tandis que l'entrée de console est manipulée dans Windows contre Linux (CR LF).

import javax.swing.JFileChooser; 

public class Example { 
    public static void main(String[] args) { 
     new JFileChooser().showOpenDialog(null); 
    } 
} 

Merci

Répondre

1

On dirait que vous êtes tout aussi nouveau ici que je suis. ;) Voyons voir si je peux aider. J'ai fait des modifications à votre code pour le compiler et l'ai exécuté sur une machine Windows Server 2003 x64, et je n'ai vu aucun problème - la boîte de dialogue de sélection de fichier s'ouvre.

Je suggère deux choses que vous pouvez faire pour éliminer d'autres possibilités:

1) Veiller à ce regard natif du système & sensation est réglé. Réglez votre look & sensation à la valeur par défaut du système en utilisant quand votre programme commence: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

2) Assurez-vous de construire seulement et ouvrez vos JFileChooserDialog, et tous les autres composants Swing, à l'intérieur du fil Dispatch Event (HAE). Si vous connaissez le thread en cours est le thread principal ou un autre thread de travail (et je suppose que c'est parce que vous prenez l'entrée de la console), vous devez appeler SwingUtilities.invokeLater(Runnable) pour une exécution correcte.

Bonne chance avec ça.

+0

Bonjour, Le lendemain, après avoir posté la question originale, j'ai trouvé le problème. Il n'y avait pas de problème! La boîte de dialogue s'ouvrait, mais elle s'ouvrait derrière l'EDI, mais aucune icône java n'était affichée dans la barre des tâches, donc je n'ai jamais réalisé qu'elle s'ouvrait réellement. Merci encore. – jmccrohan

+0

Oui - Je trouve que cela arrive assez souvent dans Eclipse, en particulier avec les dialogues et les écrans de démarrage, qui n'ont pas d'icônes dans la barre des tâches. Appeler requestFocusInWindow() sur le JFileChooser peut aider, mais je ne peux pas en être certain. – BoffinbraiN