我正在试图弄清楚如何在正在读取文件时填充JProgressBar。更具体地说,我需要读入2个文件并填充2个JProgressBars,然后在读取其中一个文件后停止。
我无法理解如何使用文件进行工作。使用两个线程,我只需要for(int i = 0; i < 100; i++)
循环和setValue(i)
来获取当前进度。但是对于文件,我不知道如何设置进度。也许得到文件的大小,并试着用它?我真的不确定,并希望有人可以抛出一两个想法。
谢谢!
未来读者的更新:
我设法通过使用file.length()
来解决它,该for(int i = 0; i < fileSize; i++)
以字节为单位返回文件大小,然后将条形设置为从0变为该大小而不是常规100,然后使用
{{1}}
要按照它应该加载条形码。
答案 0 :(得分:1)
ProgressMonitorInputStream的示例用法。如果从InputStream读取更长时间,它会自动显示带有progressbar的简单对话框 - 您可以使用以下命令调整该时间:setMillisToPopup,setMillisToDecideToPopup。
public static void main(String[] args) {
JFrame mainFrame = new JFrame();
mainFrame.setSize(640, 480);
mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mainFrame.setVisible(true);
String filename = "Path to your filename"; // replace with real filename
File file = new File(filename);
try (FileInputStream inputStream = new FileInputStream(file);
ProgressMonitorInputStream progressInputStream = new ProgressMonitorInputStream(mainFrame, "Reading file: " + filename, inputStream)) {
byte[] buffer = new byte[10]; // Make this number bigger - 10240 bytes for example. 10 is there to show how that dialog looks like
long totalReaded = 0;
long totalSize = file.length();
int readed = 0;
while((readed = progressInputStream.read(buffer)) != -1) {
totalReaded += readed;
progressInputStream.getProgressMonitor().setNote(String.format("%d / %d kB", totalReaded / 1024, totalSize / 1024));
// Do something with data in buffer
}
} catch(IOException ex) {
System.err.println(ex);
}
}