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();
}
}
});
});
}