предположим, что у нас есть этот URL-адрес
"mysite.com"
. На этом сайте у нас есть каталог с изображениями, содержащий около 200 изображений PNG
Я хочусоздать программу, которая просматривает эти изображения одну за другой (вы можете предсказать URL-адрес изображения, если вы знаете URL-адрес предыдущего изображения), а затем я хочу отобразить это изображение на моем JFrame
, что я изначально думал делатьбыло, так как я знаю URL, почему бы мне просто не просканировать все URL разных изображений, а затем сделать это?
Image image = ImageIO.read(url); hasImage.setIcon(new
ImageIcon(image));
сейчас
hasImage
- это JLabel, гдеЯ использую изображение, которое я только что загрузил с URL
и
url
- это объект класса URL
, поэтому каждый раз в цикле я нахожу новый URLи я вызываю функцию с двумя строками кода, которые я только что опубликовал выше, чтобы обновить изображение на моем ярлыке
, обратите внимание, что эти две строки находятся внутри кнопки ActionListener, так что каждый раз, когда я нажимаюна кнопке следующее изображение будетisplayed
здесь есть одна серьезная проблема.
когда я хочу отобразить следующее изображение, требуется некоторое время, чтобы создать новый объект URL, загрузить изображение, а затем отобразить его на моемярлык, который немного раздражает, особенно если вы спешите и хотите очень быстро отображать изображения ...
Теперь я подумал о другой реализации, почему бы просто не скачать все изображения, сохранить ихгде-то локально, а затем сканировать каталог, в котором вы сохранили изображения, и отображать их при каждом нажатии кнопки?
хорошо, я сделал это, но проблема в том, что загрузка всех изображений занимает более минутыпосле этого он работает плавно, очень быстро
, поэтому здесь большая проблема в том, что загрузка изображений занимает так много времени, так что это в основном предыдущая реализация, но в этом вместо того, чтобы немного подождать, когда янажмите кнопку, я как бы подожду, пока все загрузится, что занимает столько же времени ...
мой вопросна это, как я могу сделать это быстрее?если бы он загружал все изображения менее чем за 5 секунд, я был бы удовлетворен
, вот функция, которую я использую для сохранения изображений
private void saveImages() {
Image image;
int ID = 1;
String destFile = "destFolder" + ID + ".png";
try {
image = ImageIO.read(url);
ImageIO.write((RenderedImage) image, "png", new File(destFile));
} catch (IOException ex) {
}
while (ID < 200) {
try {
String path = url.getPath();
String[] token = path.split("-");
String[] finalToken = token[2].split("\\.");
ID = Integer.parseInt(finalToken[0]);
url = new URL("http://somesite/images/" + (ID + 1) + ".png");
destFile = "C:\\...\\destFolder\\" + ID + ".png";
image = ImageIO.read(url);
ImageIO.write((RenderedImage) image, "png", new File(destFile));
} catch (MalformedURLException ex) {
JOptionPane.showMessageDialog(null,
"URL is not in the correct form", "Malformed URL",
JOptionPane.ERROR_MESSAGE);
} catch (IOException ex) {
}
}
JOptionPane.showMessageDialog(null, "Images were loaded successfully",
"Success", JOptionPane.INFORMATION_MESSAGE);
}
РЕДАКТИРОВАТЬ: Btw I 'мне очень жаль код, он немного грязный, я набрал только первое ... я изменю его позже в лучшую сторону, но надеюсь, вы поймете, с какой проблемой я сталкиваюсь сейчас:)