2012-05-15 24 views
5

Ho un problema con JFileChooser in Ubuntu 12.04. Io uso questo codice per impostare l'aspetto grafico: javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());miglioramento di JFileChooser in Ubuntu 12.04 (GTK)

E sembra così. E 'molto scomodo da usare e sembra molto brutto:

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

vorrei farlo sembrare come questo:

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

Utilizzando il suggerimento da questo post, ho cercato di usare FileDialog invece dello FileChooser. Ma FileDialog lancia un'eccezione quando lo avvio nella modalità LOAD e clicco sul pulsante "apri". il mio modo di creare la finestra:

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

L'eccezione:

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) 

Sto usando Oracle JDK7 sotto Ubuntu Linux 12.04 con Gnome 3 (se questo aiuta).

Qualcuno ha un'idea di come sia possibile migliorare l'aspetto dello JFileChooser o utilizzare lo FileDialog?

+1

nessuna idea del motivo per cui hai avuto un'eccezione, non ho alcun problema su Win OS, per i potenziali rispondenti che devi modificare la tua domanda con un [SSCCE] (http://example.com), ci sono alcuni rispondenti usando * nix clones, – mKorbel

+0

C'è un pulsante immagine per incorporare un'immagine. –

risposta

0

Una NullPointerException di solito significa che stai puntando a qualcosa che non c'è. Suppongo che il riferimento che cerchi di puntare sia perso, durante il runtime.

2

Ho avuto lo stesso problema in un progetto di GUI Java su cui stavo lavorando. L'ho impostato per utilizzare il programma terminale "zenity" per chiamare il selettore di file nativo sui sistemi Linux/unix. Si noti che questa soluzione non richiede l'importazione di librerie Java extra (È necessario aver Zenity installato su Linux però), e funziona anche bene su 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

Solo per completezza, ecco la java-forum.org thread in cui hai postato su la stessa domanda in tedesco.

Utente eRaaaa ha pubblicato un fix to this bug, che successivamente è stato convertito in un bug report in bugs.sun.com che è stato valutato positivamente.