ProgressBar не реагирует - Java

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Никак не могу подружить вот это:
private void pi()
    {
        webEngine.getLoadWorker().workDoneProperty().addListener((ov, old_val, new_val) -> {
            browser.getEngine().getLoadWorker().progressProperty().addListener((observable, oldValue, newValue) -> {
                if (new_val.doubleValue() != 100.0) {
                    pb.setVisible(true);
                    pb.setProgress(new_val.doubleValue() / 50);
 
                } else{
                    pb.setVisible(false);
                }
            });
        });
    }
вот с этим:
private void savaFiles(){
        webEngine.locationProperty().addListener((observable, oldLoc, newLoc) -> {
            Platform.runLater(() -> {
                if (newLoc.endsWith(newLoc.substring(newLoc.lastIndexOf('/') + 1)) == oldLoc.endsWith(newLoc.substring(newLoc.lastIndexOf('/') + 1))) {
                    return;
                }
 
                String downloadableExtension = null;
                String[] downloadableExtensions = {".exe", ".msi", ".doc", ".docx", ".xls", ".xlsx", ".rar", ".zip"}; // Доступные для скачивания типы файлов.
                for (String ext : downloadableExtensions) {
                    if (newLoc.endsWith(ext)) {
                        downloadableExtension = ext;
                        break;
                    }
                }
                if (downloadableExtension != null) {
                    FileChooser chooser = new FileChooser();
                    chooser.setTitle("Сохранение файла");
                    int filenameIdx = newLoc.lastIndexOf("/") + 1; // Определение индекса скачиваемого имени файла.
                    String fileNameStr = newLoc.substring(newLoc.lastIndexOf('/') + 1); // Определение имени скачиваемого файла.
                    chooser.setInitialDirectory(new File(System.getProperty("user.home"))); // Каталог для сохранения скачиваемого файла по умолчанию.
                    chooser.setInitialFileName(fileNameStr); // Подстановка имени скачиваемого файла в поле "Имя файла" диалога сохранения файла.
                    chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("All files", "*.*")); // Получения расширения скачиваемого файла и подстановка его в поле "Тип файла" диалога сохранения файла.
                    if (filenameIdx != 0) {
                        File saveFile = chooser.showSaveDialog(browser.getScene().getWindow());
                        if (saveFile != null) {
                            BufferedInputStream is = null;
                            BufferedOutputStream os = null;
                            try {
                                is = new BufferedInputStream(new URL(newLoc).openStream());
                                os = new BufferedOutputStream(new FileOutputStream(saveFile));
 
                                int b = 0;
                                try {
                                    b = is.read();
                                } catch (IOException e) {
                                }
                                while (b != -1) {
                                    os.write(b);
                                    b = is.read();
 
                                }
                            } catch (FileNotFoundException e) {
                                System.out.println("Невозможно сохранить файл: " + e);
                            } catch (MalformedURLException e) {
                                System.out.println("Невозможно сохранить файл: " + e);
                            } catch (IOException e) {
                                System.out.println("Невозможно сохранить файл: " + e);
                            } finally {
                                try {
                                    if (is != null) is.close();
                                } catch (IOException e) {
                                }
                                try {
                                    if (os != null) os.close();
                                } catch (IOException e) {
                                }
                            }
                        }
                    }
                }
            });
        });
    }
По отдельности работают, а вместе не хотят.. Ткните носом, пожалуйста)
правильнее, конечно,
private void pi()
    {
        webEngine.getLoadWorker().workDoneProperty().addListener((ov, old_val, new_val) -> {
                if (new_val.doubleValue() != 100.0) {
                    pb.setVisible(true);
                    pb.setProgress(new_val.doubleValue() / 50);
 
                } else{
                    pb.setVisible(false);
                }
        });
    }
но, всё равно не срабатывает совместно с saveFiles() (см. выше)

Решение задачи: «ProgressBar не реагирует»

textual
Листинг программы
// ПРОЦЕСС СКАЧИВАНИЯ И СОХРАНЕНИЯ ФАЙЛОВ.
    private void savaFiles(){
        webEngine.locationProperty().addListener((observable, oldLoc, newLoc) -> {
            Platform.runLater(() -> {
                pi.setVisible(false);
                if (newLoc.endsWith(newLoc.substring(newLoc.lastIndexOf('/') + 1)) == oldLoc.endsWith(newLoc.substring(newLoc.lastIndexOf('/') + 1))) {
                    //System.out.println("ChangeListener cancelling " + browser.getEngine().getLocation());
                    //browser.getEngine().getLoadWorker().cancel();
                    return;
                }
 
                String downloadableExtension = null;
                String[] downloadableExtensions = {".exe", ".msi", ".doc", ".docx", ".xls", ".xlsx", ".rar", ".zip"}; // Доступные для скачивания типы файлов.
                for (String ext : downloadableExtensions) {
                    if (newLoc.endsWith(ext)) {
                        downloadableExtension = ext;
                        break;
                    }
                }
                if (downloadableExtension != null) {
                    FileChooser chooser = new FileChooser();
                    chooser.setTitle("Сохранение файла");
                    int filenameIdx = newLoc.lastIndexOf("/") + 1; // Определение индекса скачиваемого имени файла.
                    String fileNameStr = newLoc.substring(newLoc.lastIndexOf('/') + 1); // Определение имени скачиваемого файла.
                    chooser.setInitialDirectory(new File(System.getProperty("user.home"))); // Каталог для сохранения скачиваемого файла по умолчанию.
                    chooser.setInitialFileName(fileNameStr); // Подстановка имени скачиваемого файла в поле "Имя файла" диалога сохранения файла.
                    chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("All files", "*.*")); // Получения расширения скачиваемого файла и подстановка его в поле "Тип файла" диалога сохранения файла.
                    if (filenameIdx != 0) {
                        File saveFile = chooser.showSaveDialog(browser.getScene().getWindow());
                        if (saveFile != null) {
                            BufferedImage image = null;
                            try {
                                image = ImageIO.read(getClass().getResource("img/ci_logo_new.png"));
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            final JProgressBar jProgressBar = new JProgressBar();
                            jProgressBar.setMaximum(100000);
                            JFrame frame = new JFrame();
                            frame.setIconImage(image);
                            frame.setTitle("Скачивание " + fileNameStr);
                            frame.setContentPane(jProgressBar);
                            frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
                            frame.setSize(375, 50);
                            frame.setResizable(false);
                            frame.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2, Toolkit.getDefaultToolkit().getScreenSize().height/2);
                            frame.setVisible(true);
 
                            Runnable updatethread = new Runnable() {
                                public void run() {
                                    BufferedInputStream is = null;
                                    BufferedOutputStream os = null;
                                    try {
                                        URL url = new URL(newLoc);
                                        HttpURLConnection httpConnection = (HttpURLConnection) (url.openConnection());
                                        long completeFileSize = httpConnection.getContentLength();
 
                                        is = new BufferedInputStream(httpConnection.getInputStream());
                                        os = new BufferedOutputStream(new FileOutputStream(saveFile), 1024);
 
                                        byte[] data = new byte[1024];
                                        long downloadedFileSize = 0;
                                        int x = 0;
                                        while ((x = is.read(data, 0, 1024)) >= 0) {
                                            downloadedFileSize += x;
 
                                            // Расчёт прогресса.
                                            final int currentProgress = (int) ((((double)downloadedFileSize) / ((double)completeFileSize)) * 100000d);
 
                                            // Обновление прогрессбара.
                                            SwingUtilities.invokeLater(new Runnable() {
 
                                                @Override
                                                public void run() {
                                                    jProgressBar.setValue(currentProgress);
                                                }
                                            });
 
                                            os.write(data, 0, x);
                                        }
                                        os.close();
                                        is.close();
                                        frame.dispose();
                                    } catch (FileNotFoundException e) {
                                        System.out.println("Невозможно сохранить файл: " + e);
                                    } catch (MalformedURLException e) {
                                        System.out.println("Невозможно сохранить файл: " + e);
                                    } catch (IOException e) {
                                        System.out.println("Невозможно сохранить файл: " + e);
                                    } finally {
                                        try {
                                            if (is != null) is.close();
                                        } catch (IOException e) {
                                        }
                                        try {
                                            if (os != null) os.close();
                                        } catch (IOException e) {
                                        }
                                    }
                                }
                            };
                            new Thread(updatethread).start();
 
                    }
                }
            });
        });
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.2 из 5