我正在尝试从我的应用程序中的文件中读取一个大对象。由于这可能需要一些时间,我想以某种方式将文件的读取与 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);
}
}