2012-05-15 23 views
5

Tengo un problema con el JFileChooser en Ubuntu 12.04. Uso este código para establecer la apariencia: javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());mejorando JFileChooser bajo Ubuntu 12.04 (GTK)

Y se ve así. Es muy incómodo de usar y se ve muy fea:

http://www9.picfront.org/token/9sRH/2012/05/15/2062476.jpg

me gustaría que se vea como esto:

http://www4.picfront.org/token/1lpa/2012/05/15/2062477.jpg

Uso de la pista de esta post, traté de usar FileDialog en lugar de FileChooser. Pero FileDialog arroja una excepción cuando lo inicio en el modo LOAD y hago clic en el botón "abrir". La forma en que creado el diálogo:

FileDialog fd = new FileDialog(frame, "Test", FileDialog.LOAD); 
fd.setVisible(true); 

La Excepción:

Exception in thread "Thread-0" java.lang.NullPointerException 
at sun.awt.X11.GtkFileDialogPeer.setFileInternal(GtkFileDialogPeer.java:79) 
at sun.awt.X11.GtkFileDialogPeer.run(Native Method) 
at sun.awt.X11.GtkFileDialogPeer.showNativeDialog(GtkFileDialogPeer.java:172) 
at sun.awt.X11.GtkFileDialogPeer.access$000(GtkFileDialogPeer.java:39) 
at sun.awt.X11.GtkFileDialogPeer$1.run(GtkFileDialogPeer.java:114) 

Estoy utilizando Oracle JDK7 bajo Ubuntu Linux 12.04 con Gnome 3 (si esto ayuda).

¿Alguien tiene una idea de cómo podría mejorar el aspecto del JFileChooser o el FileDialog?

+1

no tengo idea de por qué recibiste una excepción, no tengo ningún problema en Win OS, para los potenciales contendientes tienes que editar tu pregunta con un [SSCCE] (http://example.com), hay algunos que responden usando * nix clones, – mKorbel

+0

Hay un botón de imagen para incrustar una imagen. –

Respuesta

0

Una NullPointerException generalmente significa que está apuntando a algo que no está allí. Supongo que la referencia a la que intenta apuntar se pierde durante el tiempo de ejecución.

2

Tuve el mismo problema en un proyecto de GUI de Java en el que estaba trabajando. Lo configuré para usar el programa de terminal "zenity" para llamar al selector nativo de archivos en los sistemas Linux/Unix. Tenga en cuenta que esta solución no requiere la importación de cualquier biblioteca de Java extra (Debe haber instalado Zenity en Linux sin embargo), y también funciona bien en Windows:

private File fileSelection(boolean savemode) { 
     String os = System.getProperty("os.name"); 
     File input = null; 
     String zenity = "zenity --file-selection --title=Open"; 
     String filestring; 
     if ((os.indexOf("nix")!=-1 || os.indexOf("nux")!=-1)) { 
      //Use native Linux file selection. 
      try { 
       if (savemode) { 
        zenity ="zenity --file-selection --title=Save --save"; 
       } 
       Process p = Runtime.getRuntime().exec(zenity); 
       BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
       StringBuffer sb = new StringBuffer(); 
       String line; 
       /*while ((line = br.readLine()) != null) { 
        sb.append(line).append("\n"); 
       } */ 
       sb.append(br.readLine()); 
       filestring = sb.toString(); 
       if (filestring.equals("null")) { 
        return null; 
       } 
       System.out.println(filestring); 
       input = new File(filestring); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } else { 
      final JFileChooser fc = new JFileChooser(); 
      int returnVal; 
      if (savemode) { 
       returnVal = fc.showSaveDialog(fc); 
      } else { 
       returnVal = fc.showOpenDialog(fc); 
      } 
      if (returnVal == JFileChooser.APPROVE_OPTION) { 
       input = fc.getSelectedFile(); 
      } 
     } 
     return input; 
    } 
1

sólo por el bien integridad, aquí está el java-forum.org thread donde informados acerca la misma pregunta en alemán.

Usuario eRaaaa publicó fix to this bug, que posteriormente se convirtió en bug report en bugs.sun.com que se revisó positivamente.

Cuestiones relacionadas