Индикатор выполнения Java Swing для процесса загрузки

Я использую функцию Java для загрузки файла из Интернета.

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 :)
}

И у меня есть компонент JProgressBarв моем JPanel, который должен визуализировать процесс загрузки :

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

. Я хотел бы отделить функции "заднего -конца" от "переднего конца -конца", представляемых пользователям, по аналогии с MVC в веб-приложениях.

Итак, функция getLatestRelease()лежит в пакете frameworkв классе MyFramework.

Все, что связано с генерацией интерфейса Swing, в том числе прослушиватели событий, находится в пакете frontend.

В основном классе Controllerя создаю экземпляр MyFrameworkи экземпляр ApplicationFrontend, который является основным классом пакета frontend.

Вопрос в том, как обновить значение progressBarв зависимости от хода загрузки?

6
задан mKorbel 14 August 2012 в 07:21
поделиться