Задваивается вызов showSaveDialog - Java
Формулировка задачи:
Доброго времени суток!
Пишу приложение, содержащие ссылки на полезные сайты для клиентов, переход на которые осуществляется внутри приложения (так сказать, мини-браузер).
Затык в том, что кликая на любую ссылку, чтобы скачать файл, поочередно дважды вызывается showSaveDialog.
вот соответствующая часть кода:
Прошу помочь отыскать путь решения.
browser.getEngine().locationProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observableValue, String oldLoc, String newLoc) { 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) { e.printStackTrace(); } 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) {} } } } } });
Решение задачи: «Задваивается вызов showSaveDialog»
textual
Листинг программы
browser.getEngine().locationProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldLoc, String newLoc) { /* Проверяем, ведут ли предыдущая и текущая ссылки к одному и тому же контенту. Если да, то отменяем действие листенера. Как-то так... */ if (newLoc.endsWith(newLoc.substring(newLoc.lastIndexOf('/') + 1)) == oldLoc.endsWith(newLoc.substring(newLoc.lastIndexOf('/') + 1))) { System.out.println("ChangeListener cancelling " + webEngine.getLocation()); return; } /*какой-то код*/ } });
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д