22
Июл
2017

Запустить загрузку файла в отдельном потоке

Доброго времени суток!

Не подскажите, как запустить загрузку файла в Java в отдельном потоке. Хочу, чтобы пока загружался файл - менялся JProgressBar и JFrame в котором он расположен можно было двигать, в однопоточном режиме этого сделать не возможно.

public static void download(String url_file, File file, String type) {

    Frame download = new Frame(Config.width_launcher, Config.height_launcher); 
    Panel panel = new Panel("background_download");

    /* Элементы */

    Title title = new Title(Config.title_launcher + " " + Config.launcher_version);

    Label text = new Label("");

    if(type.equals("client")) {

        text.setText("Загрузка клиента");

    } else {

        text.setText("Загрузка лаунчера");

    }

    Progress_Bar progress_bar = new Progress_Bar();

    /* Расположение элементов */

    title.Title_Style(0, 7, 320, 30, "font", 14F, Color.decode("#FFFFFF"));

    text.Label_Style(100, 250, 210, 41, "font", 18F, Color.decode("#FFFFFF"));

    progress_bar.Progress_Bar_Style(55, 329, 256, 21);

    /* Подключение элементов */

    panel.add(title);
    panel.add(text);
    panel.add(progress_bar);

    download.setContentPane(panel);
    download.setVisible(true);

    /* Действия */

    try {

        URL url = new URL(url_file);
        URLConnection connection = url.openConnection();

        BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
        FileOutputStream fis = new FileOutputStream(file);
        byte[] buffer = new byte[1024];

        int count = 0;
        int totalsize = connection.getContentLength();
        int procents = 0;
        int currentsize = 0;

        while((count = bis.read(buffer,0,1024)) != -1) {

            fis.write(buffer, 0, count);

            currentsize += count;
            procents = (int)(currentsize * 100 / totalsize);             

            progress_bar.setValue(procents);

            debug(procents+ "%", "info");

            if(type.equals("client") && progress_bar.getValue() >= 100) {

                text.setText("Распаковка клиента");

            }

        }

        fis.close();
        bis.close();

    } catch(Exception e) {

        debug("Загрузка не удалась", "error");

    }

}

Источник: https://ru.stackoverflow.com/questions/695270/%D0%97%D0%B0%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C-%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D1%83-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0-%D0%B2-%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B5

Тебе может это понравится...

Добавить комментарий