Java Swing progress bar for download process

Viewed 7185

I am using Java function to download file from internet.

public void getLatestRelease()
{
    try
    {
        // Function called
        long startTime = System.currentTimeMillis();

        // Open connection
        System.out.println("Connecting...");
        URL url = new URL(latestReleaseUrl);
        url.openConnection();

        // Download routine
        InputStream reader = url.openStream();
        FileOutputStream writer = new FileOutputStream("release.zip");

        byte[] buffer = new byte[153600];
        int totalBytesRead = 0;
        int bytesRead = 0;

        while ((bytesRead = reader.read(buffer)) > 0)
        {
            writer.write(buffer, 0, bytesRead);
            buffer = new byte[153600];
            totalBytesRead += bytesRead;
        }

        // Download finished
        long endTime = System.currentTimeMillis();

        // Output download information
        System.out.println("Done.");
        System.out.println((new Integer(totalBytesRead).toString()) + " bytes read.");
        System.out.println("It took " + (new Long(endTime - startTime).toString()) + " milliseconds.");

        // Close input and output streams
        writer.close();
        reader.close();
    }

    // Here I catch MalformedURLException and IOException :)
}

And I have JProgressBar component in my JPanel, which is supposed to visualize download progress:

private static void createProgressBar(JPanel panel)
{
    JProgressBar progressBar = new JProgressBar(0, 100);
    progressBar.setValue(0);
    progressBar.setStringPainted(true);
    panel.add(progressBar, BorderLayout.SOUTH);
}

I'd like to separate "back-end" functions from "front-end" views, presented to users, by analogy with MVC in web applications.

So, function getLatestRelease() lies in the package framework in class MyFramework.

Everything, connected with Swing interface generation, including event listeners, is in the package frontend.

In the main Controller class I create an instance of MyFramework and an instance of ApplicationFrontend, which is the main class of frontend package.

The questions is how to update progressBar value, depending on download progress?

1 Answers
Related