This question already has an answer here:
- JProgressBar wont update 3 answers
I currently have a class that should show me a simple form while downloading a file. It is working, but the progress bar is not updating, and I can only see it once the download is finished. Can someone help me?
import java.awt.FlowLayout; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.JProgressBar; public class Downloader { public Downloader(String site, File file) { JFrame frm = new JFrame(); JProgressBar current = new JProgressBar(0, 100); current.setSize(50, 100); current.setValue(0); current.setStringPainted(true); frm.add(current); frm.setVisible(true); frm.setLayout(new FlowLayout()); frm.setSize(50, 100); frm.setDefaultCloseOperation(EXIT_ON_CLOSE); try { URL url = new URL(site); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); int filesize = connection.getContentLength(); float totalDataRead = 0; try (java.io.BufferedInputStream in = new java.io.BufferedInputStream(connection.getInputStream())) { java.io.FileOutputStream fos = new java.io.FileOutputStream(file); try (java.io.BufferedOutputStream bout = new BufferedOutputStream(fos, 1024)) { byte[] data = new byte[1024]; int i; while ((i = in.read(data, 0, 1024)) >= 0) { totalDataRead = totalDataRead + i; bout.write(data, 0, i); float Percent = (totalDataRead * 100) / filesize; current.setValue((int) Percent); } } } } catch (IOException e) { javax.swing.JOptionPane.showConfirmDialog((java.awt.Component) null, e.getMessage(), "Error", javax.swing.JOptionPane.DEFAULT_OPTION); } } }