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