Проблема загрузки ресурсов Java-апплета

#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-файла, чтобы избежать этого тоже.