Апплет и динамическая загрузка классов - PullRequest
0 голосов
/ 24 мая 2010

Прежде всего, это первый раз, когда я задаю вопрос на языке Java, поэтому я надеюсь, что сделаю себя понятным :-) Заранее благодарен всем, кто изучает это.загружать классы в зависимости от взаимодействия пользователей с апплетом.Я подписал апплет, поэтому безопасность не должна быть проблемой (если я правильно понимаю).Все мои файлы находятся в applet.jar, который содержит пакет с именем p6applet, а внутри пакета находятся все файлы .class.Я использую следующий код для тестирования апплета:

<APPLET 
     CODE="p6applet.Main.class" 
     ARCHIVE = applet.jar 
         WIDTH=0 
         HEIGHT=0>
</APPLET>

Класс, который нужно загрузить, находится на жестком диске пользователя.Необходимо импортировать интерфейс, который находится в файле applet.jar в пакете p6applet.Этот интерфейс называется AlgorithmExecutable.

Когда я запускаю свое приложение, оно выполняет следующий код, где после ошибки происходит: Ошибка возникает, когда программа выполняет следующие строки кода:

    className = ...;
try {
    System.out.println("Test1");
    URL[] urlClass = {new URL("file:/C:/.../")};
    System.out.println("Test2");
    ClassLoader cl = new URLClassLoader(urlClass);
    System.out.println("Test3");
    algorithmClass = cl.loadClass(className); //This is where the error occurs
    System.out.println("Test4");
    algorithm = (AlgorithmExecutable) algorithmClass.newInstance();
    System.out.println("The " + className + " has been loaded.");
} catch (MalformedURLException ex) {
    System.out.println("MalformedURLException: " + ex);
} catch (ClassNotFoundException ex) {
    System.out.println("ClassNotFoundException: " + ex);
} catch (InstantiationException ex) {
    System.out.println("InstantiationException: " + ex);
} catch (IllegalAccessException ex) {
    System.out.println("IllegalAccessException: " + ex);
}

Я получаю следующую ошибку:

Exception in thread "AWT-EventQueue-7" java.lang.NoClassDefFoundError: p6applet/AlgorithmExecutable
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at p6applet.AlgorithmHandler.getAlgorithm(AlgorithmHandler.java:52)
    at p6applet.AlgorithmInterface.actionPerformed(AlgorithmInterface.java:671)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: p6applet.AlgorithmExecutable
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 38 more

Мой апплет работает нормально в средстве просмотра апплета netbeans, если это может помочь определить проблему.Я подозреваю, что проблема в том, что файл, который должен быть загружен, не может успешно импортировать интерфейс AlgorithmExecutable.Любая помощь будет оценена.

1 Ответ

2 голосов
/ 24 мая 2010

Я думаю, что основная проблема в том, что у вас нет прав доступа для использования file: //, возможно, даже если апплет подписан и права доступа предоставлены.Насколько я знаю, вам нужно получить доступ к URL-адресам на локальном сервере или в jar-файлах на пути к классам.Это сложная проблема.

http://www.securingjava.com/chapter-two/chapter-two-7.html

http://forums.sun.com/thread.jspa?threadID=5427882&tstart=0

http://mindprod.com/jgloss/applet.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...