【问题标题】:improving JFileChooser under Ubuntu 12.04 (GTK)改进 Ubuntu 12.04 (GTK) 下的 JFileChooser
【发布时间】:2012-05-15 09:27:12
【问题描述】:

我对 Ubuntu 12.04 下的 JFileChooser 有疑问。我使用此代码来设置外观: javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());

它看起来像这样。用起来很不舒服,而且看起来很丑:


(来源:picfront.org

我希望它看起来像这样:


(来源:picfront.org

使用来自 post 的提示,我尝试使用 FileDialog 而不是 FileChooser。但是当我以LOAD 模式启动它并单击“打开”按钮时,FileDialog 会引发异常。 我创建对话框的方式:

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

例外:

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)

我在带有 Gnome 3 的 Ubuntu Linux 12.04 下使用 Oracle JDK7(如果有帮助的话)。

有人知道如何改善JFileChooser 的外观或让FileDialog 正常工作吗?

【问题讨论】:

  • 不知道为什么你得到了一个例外,我在 Win OS 上没有任何问题,对于潜在的回答者,你必须用 SSCCE 编辑你的问题,有一些回答者使用 *nix 克隆,
  • 有一个图片按钮可以嵌入图片。

标签: java swing ubuntu jfilechooser filedialog


【解决方案1】:

我在一个 Java GUI 项目中遇到了同样的问题。我将它设置为使用“zenity”终端程序来调用 Linux/unix 系统上的本机文件选择器。请注意,此解决方案不需要导入任何额外的 Java 库(但您必须在 Linux 上安装 Zenity),并且在 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;
    }

【讨论】:

    【解决方案2】:

    为了完整起见,这里是 java-forum.org thread,您在此处用德语发布了相同的问题。

    用户 eRaaaa 发布了 fix to this bug,随后在 bugs.sun.com 上变成了 bug report,并获得了正面评价。

    【讨论】:

      【解决方案3】:

      NullPointerException 通常意味着您指向的东西不存在。我想您尝试指向的引用在运行时丢失了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-23
        • 2012-05-31
        相关资源
        最近更新 更多