Java7 u25での話です。
Java6では発生しません。
AWTのFileDialogを使用してファイルを選択すると
getDirectory()には、フォルダ名、
getFile()には、ファイル名が入るはずですが、
setFile()で「*bmp;*jpg;*jpeg;*wbmp;*png;*gif;*tga;*pict」と入れて、
ファイルの拡張子を固定するようにしたうえで、
短いファイルパスのファイルを選択すると、
次のように返すこととがあります。
getDirectory() → C:\Users\xxx\Documents\193.jpg
getFile() → f;*tga;*pict
恐らく、setFile()で設定した長さの文字列より
短いファイルパスを選択するとバグるようです。
というわけで、なおるまで次のように回避します。
import java.awt.Dialog; import java.awt.FileDialog; import java.awt.Frame; import java.io.File; public class FileDialog2 extends FileDialog { public FileDialog2(Dialog paramDialog) { super(paramDialog); } public FileDialog2(Dialog paramDialog, String paramString) { super(paramDialog, paramString); } public FileDialog2(Dialog paramDialog, String paramString, int paramInt) { super(paramDialog, paramString, paramInt); } public FileDialog2(Frame paramFrame) { super(paramFrame); } public FileDialog2(Frame paramFrame, String paramString) { super(paramFrame, paramString); } public FileDialog2(Frame paramFrame, String paramString, int paramInt) { super(paramFrame, paramString, paramInt); } public String getDirectory() { String dir = super.getDirectory(); if(dir == null) { return(null); } File f = new File(dir); if(f.isDirectory()) { return(dir); } else { return(f.getParent() + "\\"); } } public String getFile() { String file = super.getFile(); if(file == null) { return(null); } File f = new File(super.getDirectory()); if(f.isDirectory()) { return(super.getFile()); } else { return(f.getName()); } } }
追記
そもそもJava7だと、
setFileによるフィルタリングが機能していないようです。
コメント