2

問題は、File返されたオブジェクトのJFileChooserファイル名が不完全であることです。より正確には、ファイル拡張子部分を除いたファイル名を返します。getPathを使用してパスを取得しようとしましgetAbsolutePathgetCanonicalPathが、拡張部分なしで同じパスを返します。Windows、Linux、および OSX 10.6 で同じプログラムとコードが正常に動作する

この問題は、Java SE 10.6.0_33-b03-424 を搭載した OSX 10.7.4 で発生します。誰かがこれの回避策を知っていますか、または少なくともこれが起こっていることを確認できますか?

編集:

JFileChooser myImageChooser = new JFileChooser();
myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int val = myImageChooser.showDialog(NewJFrame.this, "Select Image");

        JFileChooser myImageChooser = new JFileChooser();
        myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        int val = myImageChooser.showDialog(NewJFrame.this,
                "Select Image");

        if (val == JFileChooser.APPROVE_OPTION) {
            File f = myImageChooser.getSelectedFile();
            System.err.println(myImageChooser.getSelectedFile().getAbsolutePath());
            try {
                System.err.println(myImageChooser.getSelectedFile().getCanonicalPath());
            } catch (IOException ex) {
                Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
            }
            System.err.println(myImageChooser.getSelectedFile().getName());
            System.err.println(myImageChooser.getSelectedFile().getPath());

            //loadImage(f);
            //Util.event("LoadImage", f.getName());
        }

また、非常に興味深いことに気付きました。一部のファイル、Finder で拡張子が表示されている同じファイルでは正しく機能しますが、Finder で拡張子が表示されないファイルでは失敗します。lsbashターミナルで実行して、ファイルに実際に拡張子があることを確認しました。

編集2:

Finder で「すべてのファイル名拡張子を表示」をオンにすると、JFileChooser が拡張子付きのファイル名を返すようになりました。これは、JFileChooser の基礎となる実装の設計エラーのようです。私の場合、これは平均的なユーザーを対象とした消費者製品であるため、それは問題の解決には実際には役立ちません.

4

2 に答える 2

0

コードの一部を更新すると、次の出力が得られます。

C:\ Users \ Arno \ Documents \ My Games \ Skyrim \ RendererInfo.txt C:\ Users \ Arno \ Documents \ My Games \ Skyrim \ RendererInfo.txt RendererInfo.txt C:\ Users \ Arno \ Documents \ My Games \ Skyrim \ RendererInfo.txt

更新されたコードは次のとおりです。

JFileChooser myImageChooser = new JFileChooser();
    myImageChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    int val = myImageChooser.showDialog(null, "Select Image");

    if (val == JFileChooser.APPROVE_OPTION) {
        File f = myImageChooser.getSelectedFile();
        System.err.println(myImageChooser.getSelectedFile()
                .getAbsolutePath());
        try {
            System.err.println(myImageChooser.getSelectedFile()
                    .getCanonicalPath());
        } catch (IOException ex) {

        }
        System.err.println(myImageChooser.getSelectedFile().getName());
        System.err.println(myImageChooser.getSelectedFile().getPath());

        // loadImage(f);
        // Util.event("LoadImage", f.getName());
    }
}
于 2012-07-12T09:07:39.060 に答える
0

これはファインダーの特徴のようです。

Finder で拡張機能の非表示をオフにすると拡張機能が取得され、Finder で拡張機能の非表示をオンにすると取得されません

http://www.fileinfo.com/help/mac_show_extensionsをチェックして、この 2 つを切り替える方法を確認してください。

于 2012-07-12T10:03:46.620 に答える