Обновить индикатор выполнения из другого класса - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть программа, которая загружает файл, когда пользователь нажимает кнопку. Он должен отображать прогресс по мере загрузки. Кажется, я не могу установить значение индикатора выполнения из контекста, в котором я нахожусь. Вот часть основного класса:

private void InstallButtonMouseReleased(java.awt.event.MouseEvent evt) {                                            
        String remotePath = "http://download1082.mediafire.com/ei4y11f2aasg/q9c32rwtqlrz78o/Ion-Pro";
        String localPath = location + "/IonPro";
        new Thread(new Downloader(localPath, remotePath)).start();
    }                                           

    public void updateProgressBar(int percent) {
        jProgressBar1.setValue(percent);
        System.out.println(percent);
    }

Класс загрузчика:

public class Downloader implements Runnable {
    String remotePath;
    String localPath;
    double Percentace;

    public Downloader(String localPath, String remotePath) {
        this.localPath = localPath;
        this.remotePath = remotePath;
    }

    @Override
    public void run() {
        BufferedInputStream in = null;
        FileOutputStream out = null;

        try {

            URL url = new URL(remotePath);
            URLConnection conn = url.openConnection();
            int size = conn.getContentLength();

            if (size < 0) {
                System.out.println("Could not get the file size");
            } else {
                System.out.println("File size: " + size);
            }

            in = new BufferedInputStream(url.openStream());
            out = new FileOutputStream(localPath);
            byte data[] = new byte[1024];
            int count;
            double sumCount = 0.0;
            while ((count = in.read(data, 0, 1024)) != -1) {
                out.write(data, 0, count);

                sumCount += count;
                if (size > 0) {
                    Percentace = sumCount / size * 100.0;
                    int percentace = (int)Math.round(Percentace);
                    IonInstaller installer = new IonInstaller();
                    installer.updateProgressBar(percentace);

                }
            }

        } catch (MalformedURLException e1) {
        e1.printStackTrace();
        } catch (IOException e2) {
        e2.printStackTrace();
        } finally {
        if (in != null)
            try {
                in.close();
            } catch (IOException e3) {
                e3.printStackTrace();
            }
            if (out != null)
                try {
                out.close();
                } catch (IOException e4) {
                e4.printStackTrace();
                }
        }
    }

}

Я использую IDE NetBeans, поэтому большая часть обработки GUI сделана для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...