2012-05-15 16 views
5

Ich habe ein Problem mit der JFileChooser unter Ubuntu 12.04. Ich verwende diesen Code, um das Aussehen und Gefühl einzustellen: javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());Verbesserung von JFileChooser unter Ubuntu 12.04 (GTK)

Und es sieht so aus. Es ist sehr unbequem zu bedienen und es sieht sehr hässlich:

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

ich es so aussehen würden:

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

Mit dem Hinweis aus diesem post, habe ich versucht FileDialog zu verwenden anstelle der FileChooser. Aber FileDialog löst eine Ausnahme aus, wenn ich es im LOAD Modus starte und auf den "Öffnen" Knopf klicke. Die Art, wie ich erstellen Sie den Dialog:

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

Die Ausnahme:

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) 

Ich bin mit Oracle JDK7 unter Ubuntu Linux 12.04 mit Gnome 3 (falls dies hilft).

Hat jemand eine Idee, wie entweder ich das Aussehen der JFileChooser verbessern könnte oder die FileDialog funktioniert?

+1

keine Ahnung, warum Sie eine Ausnahme, ich habe kein Problem auf Win OS, für potenzielle Beantworter müssen Sie Ihre Frage mit einem [SSCCE] (http://example.com) bearbeiten, gibt es ein paar Beantworter mit * nix Klonen, – mKorbel

+0

Es gibt eine Bildschaltfläche, um ein Bild einzubetten. –

Antwort

0

Eine NullPointerException bedeutet normalerweise, dass Sie auf etwas zeigen, das nicht da ist. Ich nehme an, dass die Referenz, auf die Sie zeigen, während der Laufzeit verloren ist.

2

Ich hatte das gleiche Problem in einem Java-GUI-Projekt, an dem ich arbeitete. Ich habe es so eingestellt, dass es das Terminal-Programm "zenity" benutzt, um den nativen Datei-Chooser auf Linux/Unix-Systemen aufzurufen. Beachten Sie, dass diese Lösung keine zusätzlichen Java-Bibliotheken importieren erfordert (Sie müssen Zenity auf Linux obwohl installiert haben), und funktioniert auch unter Windows fein:

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

Nur der Vollständigkeit halber, hier ist die java-forum.org thread wo Sie geschrieben die gleiche Frage auf Deutsch.

Benutzer eRaaaa veröffentlicht eine fix to this bug, die anschließend in eine bug report bei bugs.sun.com wurde, die positiv bewertet wurde.