Задваивается вызов 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;
                }
                /*какой-то код*/
            }
        });

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


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

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

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