ProgressBar не реагирует - Java
Формулировка задачи:
Доброго времени суток!
Никак не могу подружить вот это:
вот с этим:
По отдельности работают, а вместе не хотят..
Ткните носом, пожалуйста)
но, всё равно не срабатывает совместно с saveFiles() (см. выше)
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); } }); }
Решение задачи: «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(); } } }); }); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д