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によるフィルタリングが機能していないようです。


コメント