Шрифт:
var url = new URL(urlfield.text);
// Предложить пользователю выбрать файл для сохранения содержимого URL
var response = filechooser.showSaveDialog(fгате);
// Завершить, если пользователь щелкнул на кнопке Cancel
if (response != JFileChooser.APPROVE.OPTION) return;
// Иначе получить объект java.io.File, представляющий файл назначения
var file = filechooser.getSelectedFile;
// Запустить новый поток выполнения для загрузки url
new java.lang.Thread(function {
download(url,file); }).start;
}
catch(e) {
// Вывести диалог, если что-то пошло не так
JOptionPane.showMessageDialog(frame, е.message, "Exception",
JOptionPane.ERROR.MESSAGE);
}
});
// Использует java.net.URL и др. для загрузки содержимого URL и использует java.io.File
// и др. для сохранения этого содержимого в файле. Отображает ход выполнения загрузки
// в компоненте JProgressBar. Эта функция вызывается в новом потоке выполнения,
function download(url, file) {
try {
// Каждый раз, когда запускается загрузка очередного файла,
// необходимо добавить в окно новую строку для отображения URL,
// имени файла и индикатора хода выполнения операции
var row = Box.createHorizontalBox; // Создать строку
row.setBorder(padding); // Добавить отступы
var label = url.toString + ": ";// Отобразить URL
row.add(new JLabel(label)); // в компоненте JLabel
var bar = new JProgressBar(0, 100); // Создать полосу индикатора
bar.stringPainted = true; // Отобразить имя файла
bar.string = file.toString; // в полосе индикатора
row.add(bar);// Добавить индикатор в строку
col.add(row);// Добавить строку в колонку
frame.pack; // Изменить размер окна
// Здесь еще не известен размер загружаемого файла, поэтому изначально
// индикатор просто воспроизводит анимационный эффект
bar.indeterminate = true;
// Установить соединение с сервером и получить размер загружаемого
// файла, если это возможно
var conn = url.openConnection; // Получить java.net.URLConnection
conn.connect; // Подключиться и ждать заголовки
var len = conn.contentLength; // Проверить, получена ли длина файла
if (len) { // Если длина известна, тогда
bar.maximum = len; // настроить индикатор на вывод
bar.indeterminate = false; // процента выполнения задания
}
// Получить потоки ввода и вывода
var input = conn.inputStream; // Прочитать байты с сервера