Java7でAWTのFileDialogの挙動がおかしい

プログラミング
スポンサーリンク

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

コメント

タイトルとURLをコピーしました