【发布时间】:2013-01-23 12:22:36
【问题描述】:
这是我的代码:
class Copy extends SwingWorker<Void, Void> {
private File selectedfile = new File("D:/Adatok/proba.file");
private File chosenDestination = new File("D:/Adatok/ide/proba.file");
@Override
protected Void doInBackground() throws Exception {
try {
FileInputStream fileInputStream = new FileInputStream(
selectedfile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
ProgressMonitorInputStream progressMonitorInputStream;
progressMonitorInputStream = new ProgressMonitorInputStream(Panel.this,"Copying...", bufferedInputStream);
File outputFile = new File("" + chosenDestination);
FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
int data;
byte[] buffer = new byte[1024];
while ((data = progressMonitorInputStream.read(buffer)) > 0) {
bufferedOutputStream.write(buffer);
}
bufferedOutputStream.close();
progressMonitorInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public void done() {
JOptionPane.showMessageDialog(Panel.this, "Ready!", "Done", 1);
}
}
}
它适用于较小的文件,但如果我尝试使用 3GB 的文件,进度条会显示错误的进度。当 100% 复制未完成时,在剩余时间内进度条设置为 0% 并且不会移动。它有什么问题?
【问题讨论】:
-
为了尽快获得更好的帮助,请发布SSCCE 尽管请注意,即使从 sn-p 我也得到了“错误”的印象。确保
println()java.vendor&java.version的系统属性。另请检查 Java 理解的File.length()是否符合您的期望。 -
你需要
setProgress(),比如here。 -
3Gb 大于 2147483647 (2^31 - 1) 这意味着你正在溢出(超过
Integer.MAX_INT_VALUE)。 -
那么,我需要使用什么 tpye?在哪里?
-
我发现了这个:bugs.sun.com/bugdatabase/view_bug.do?bug_id=6445283 任何解决方案?
标签: java swing file-io progress-bar progressmonitor