アプリケーションのファイルから大きなオブジェクトを読み取ろうとしています。これには時間がかかる可能性があるため、ファイルの読み取りをJProgressBarに接続したいと思います。ファイルの読み取りの進行状況を見つける簡単な方法はありますか?(ロード自体はswingworkerスレッドで行われるため、プログレスバーの更新は問題になりません。)FileInputStreamのreadByte()メソッドをオーバーライドして、ある種のプログレス値を返すことを考えていましたが、これは非常に悪質なようです。仕方。これを実現する方法についての提案は大歓迎です。
ファイルを読み取るためのコードは次のとおりです。
public class MapLoader extends SwingWorker<Void, Integer> {
String path;
WorldMap map;
public void load(String mapName) {
this.path = Game.MAP_DIR + mapName + ".map";
this.execute();
}
public WorldMap getMap() {
return map;
}
@Override
protected Void doInBackground() throws Exception {
File f = new File(path);
if (! f.exists())
throw new IllegalArgumentException(path + " is not a valid map name.");
try {
FileInputStream fs = new FileInputStream(f);
ObjectInputStream os = new ObjectInputStream(fs);
map = (WorldMap) os.readObject();
os.close();
fs.close();
} catch (IOException | ClassCastException | ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void done() {
firePropertyChange("map", null, map);
}
}