5

JFileChooserUbuntu 12.04 で問題が発生しました。このコードを使用して、ルック アンド フィールを設定します。 javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());

そして、それはこのように見えます。使用するのは非常に不快で、見た目も非常に醜いです。

ここに画像の説明を入力
(出典: picfront.org )

次のようにしたいと思います。

ここに画像の説明を入力
(出典: picfront.org )

この投稿のヒントを使用して、FileDialog代わりにFileChooser. しかし、モードで起動して「開く」ボタンをクリックするとFileDialog例外がスローされます。LOADダイアログを作成する方法:

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)

Ubuntu Linux 12.04でGnome 3を使用してOracle JDK7を使用しています(これが役立つ場合)。

の外観を改善するか、機能させる方法をJFileChooser知っている人はFileDialogいますか?

4

3 に答える 3

3

作業中のJavaGUIプロジェクトでも同じ問題が発生しました。Linux/UNIXシステムでネイティブファイルチューザーを呼び出すために「zenity」ターミナルプログラムを使用するように設定しました。このソリューションでは、追加の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;
    }
于 2012-08-08T19:31:00.657 に答える
1

完全を期すために、同じ質問についてドイツ語で投稿したjava-forum.org スレッドを次に示します。

ユーザー eRaaaaがこのバグの修正を投稿し、その後bugs.sun.com でバグ レポートになり、肯定的にレビューされました。

于 2012-08-29T17:34:21.603 に答える
0

NullPointerException は通常、存在しないものを指していることを意味します。あなたが指そうとした参照は、実行時に失われたと思います。

于 2012-05-15T11:27:19.557 に答える