Использование локального Jar из подписанного апплета - PullRequest
1 голос
/ 20 марта 2012

Возможно ли, чтобы апплет использовал локальную банку?

Мое приложение-апплет должно иметь некоторые зависимости (банок на 66 Мб). Пользователь может установить банки ранее, но как их использовать из апплета?

Я могу сохранить их в папке по умолчанию c: / myApp и / usr / local / myApp

Я попытался загрузить их:

ClassLoader loader = URLClassLoader.newInstance(
                    new URL[]{new URL("file://" + path + "/xuggle-xuggler-5.2.jar")},
                    JNLP2Manager.getCurrentManager().getAppletClassLoader()
            );

            Thread.currentThread().setContextClassLoader(loader);

Но баночка не добавляется автоматически в classpath, я имею в виду, что мне все равно нужно загружать каждый класс отдельно.

Выполнение следующих работ:

 Class cls = loader.loadClass("com.xuggle.xuggler.video.ConverterFactory");
            String testString = ConverterFactory.XUGGLER_ARGB_32;

Но можно ли добавить все классы в загрузчик апплета?

P.S. Я знаю, что не должен использовать Апплет, но Апплет все еще лучше всего подходит для моего вида приложений.

1 Ответ

2 голосов
/ 20 марта 2012

Нет, это невозможно напрямую, по крайней мере, для неподписанных апплетов. Путь к классу апплета определяется относительно его кодовой базы, из которой обычно загружается апплет.

Здесь возможны обходные пути

  1. Для подписанных апплетов вы можете использовать пользовательский загрузчик классов (используйте UrlClassLoader), который читает классы из локального jar.
  2. Для неподписанных апплетов вы можете загрузить локальный файл JAR на сервер и затем использовать его оттуда. Я думаю, что это не так уж и плохо: с точки зрения пользователя, он просто «помогает» приложению найти, где находится пользовательский jar. Что действительно происходит, так это то, что jar загружается на сервер, а апплет читает его оттуда Этот способ может быть реализован с использованием обычной HTML-формы с тегом ввода типа file. Использование AJAX может скрыть много деталей от пользователя.
...