#java #applet
#java #апплет
Вопрос:
Я только что преобразовал приложение Java Web Start в апплет. Загрузка занимает больше времени, чем раньше, поэтому я включил самый высокий уровень ведения журнала в консоли.
Программа использует много ресурсов, хранящихся в файлах .jar. Однако он пытается загрузить некоторые из них из кодовой базы на веб-сервере! Очевидно, что ответ равен 404, но это все равно отнимает много времени, поскольку файлов очень много. И как только все, наконец, загрузится, все ресурсы будут работать так, как должны! Почему это происходит и как мне остановить это?
Код загрузки ресурсов:
public static BufferedImage loadImage(String name, String path) throws IOException
{
URL url = AssetManager.class.getResource(path.replace("resource://", "resources/"));
if(url == null)
throw new IOException("Resource not found: " path);
BufferedImage image = ImageIO.read(url);
images.put(name, image);
return image;
}
Комментарии:
1. опубликуйте код, который пытается загрузить ресурсы
2. Я отредактировал код в исходном вопросе. «ресурсы» — это папка внутри одного из .jars (но не та, в которой находится этот код, может ли это быть проблемой?)
3. что произойдет, если вы сделаете что-то вроде BufferedImage image = ImageIO.read(url.openStream()); (но обязательно закройте поток в блоке finally)
4. Я пробовал это, это не устранило проблему.
5. Что вы получаете, когда выполняете System.out.println(((URLClassLoader) AssetManager.class.getClassLoader()).getURLs())
Ответ №1:
Я тоже наблюдал это, и я не совсем уверен, как избежать загрузки плагином классов из HTTP вместо jars. Вы могли бы попробовать использовать индексы jar (чтобы виртуальная машина знала, какой класс / ресурс находится в каком jar). Возможно, есть какой-то тег апплета или опция JNLP-файла, чтобы избежать этого тоже.