Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая загрузка и выполнение jar файлов 
V
    Опции темы
SergeyRostov
Дата 18.3.2010, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.3.2010

Репутация: нет
Всего: нет



Добрый Вечер! Столкнулся с трудностями при динамической загрузке классов.
Необходимо Создать объект класса находящегося в jar файле.


JarFile jarFile = null;
        try {
            jarFile = new JarFile(jarname);             
        Enumeration entries = jarFile.entries();
        InputStream in;
        byte[] data;
        while (entries.hasMoreElements()) {
            ZipEntry entry = (ZipEntry) entries.nextElement();
            System.out.println(entry.getName());
        }
        
            jarFile.close();
        } catch (IOException e1) {e1.printStackTrace();}
        
        interactionInterface node = null;
        URL url = null;
        try {
            url = new URL("jar", "","file:"+File.separator+jarname);
            ClassLoader loader = URLClassLoader.newInstance(new URL[] {url} ,getClass().getClassLoader());
            System.out.println(url.toString());
            //Class<?> clazz = Class.forName("FunctionedNode"+File.separator+"FunctionNode", true, loader);
        ---->>    Class<?> clazz = Class.forName("FunctionedNode/FunctionNode", true, loader);
            Class<? extends interactionInterface> runClass = clazz.asSubclass(interactionInterface.class);
            Constructor<? extends interactionInterface> ctor = runClass.getConstructor();
            node = ctor.newInstance();
            
            writeConsole(node.getClass().toString());
            writeConsole(node.GetAddress());
            writeConsole(""+node.GetPort());
            writeConsole(""+new Date(node.GetTime()).toString());
            
        } catch (ClassNotFoundException e) {e.printStackTrace();
        } catch (SecurityException e) {e.printStackTrace();
        } catch (NoSuchMethodException e) {e.printStackTrace();    
        } catch (MalformedURLException e) {e.printStackTrace();
        } catch (IllegalArgumentException e) {e.printStackTrace();
        } catch (InstantiationException e) {e.printStackTrace();
        } catch (IllegalAccessException e) {e.printStackTrace();
        } catch (InvocationTargetException e) {e.printStackTrace();    }
    }
META-INF/MANIFEST.MF
FunctionedNode/ReadReqular.class
FunctionedNode/InteractionInterface.class
FunctionedNode/Node.class
FunctionedNode/MyFormatted.class
FunctionedNode/Message.class
FunctionedNode/ControlPoint.class
FunctionedNode/FunctionNode.class
FunctionedNode/ServerFunctionNode.class
FunctionedNode/SendMessage.class
FunctionedNode/Time.class
FunctionedNode/SenderMessage.class
jar:file:\Works\rs.jar
java.lang.ClassNotFoundException: FunctionedNode/FunctionNode
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at cl.n1(cl.java:49)
    at cl.OpenLoadJar(cl.java:149)
    at main.main(main.java:8)

Добавлено через 2 минуты и 7 секунд
Так же пробовал еще 2а варианта.... но результат почти один и тот же(

interactionInterface node = null;
        jarname = jarname.substring(0,jarname.length()-4);
        try {
        String url = "file:"+jarname+"/FunctionedNode/FunctionNode.class";
        URL myUrl = new URL(url);
        URLConnection connection = myUrl.openConnection();
        InputStream input = connection.getInputStream();
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int data = input.read();

        while(data != -1){
                buffer.write(data);
                data = input.read();
        }

        input.close();

        byte[] classData = buffer.toByteArray();

        Class cl =  defineClass("FunctionedNode.FunctionNode",classData, 0, classData.length);
        node = (interactionInterface)cl.newInstance();
        
        
        } catch (InstantiationException e) {e.printStackTrace();
        } catch (IllegalAccessException e) {e.printStackTrace();
        } catch (MalformedURLException e) {e.printStackTrace();
        } catch (IOException e) {e.printStackTrace();}


java.io.FileNotFoundException: Works\rs\FunctionedNode\FunctionNode.class (Системе не удается найти указанный путь)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.io.FileInputStream.<init>(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
    at cl.n2(cl.java:75)
    at cl.OpenLoadJar(cl.java:148)
    at main.main(main.java:8)

Добавлено через 3 минуты и 12 секунд
JarFile jarFile = null;
        try {
            jarFile = new JarFile(jarname);
            
        Enumeration entries = jarFile.entries();
        InputStream in;
        byte[] data;
        while (entries.hasMoreElements()) {
            ZipEntry entry = (ZipEntry) entries.nextElement();
            System.out.println(entry.getName());
            if (entry.getName().equals("FunctionedNode/FunctionNode.class")){
                    try {
                    in = jarFile.getInputStream(entry);
                    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                    int data1 = in.read();
                    while(data1 != -1){
                        buffer.write(data1);
                        data1 = in.read();
                    }
                    byte[] classData = buffer.toByteArray();
                    Class cl =  defineClass("FunctionedNode.FunctionNode",classData, 0, classData.length);
                    interactionInterface node = (interactionInterface)cl.newInstance();
                    
                    } catch (InstantiationException e) {e.printStackTrace();
                    } catch (IllegalAccessException e) {e.printStackTrace();}
                    
                    
                    
            }//if
        }
        
            jarFile.close();
        } catch (IOException e1) {e1.printStackTrace();}
    }

FunctionedNode/FunctionNode.class
Exception in thread "main" java.lang.NoClassDefFoundError: FunctionedNode/InteractionInterface
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at cl.n3(cl.java:126)
    at cl.OpenLoadJar(cl.java:149)
    at main.main(main.java:8)

Добавлено через 5 минут и 12 секунд
Помогите плиз, научный руководитель прислал к вам просить о помощи))

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  rs.jar 15,73 Kb
PM MAIL   Вверх
drG100k
Дата 8.4.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 31.3.2006

Репутация: нет
Всего: нет



Даааа..... То ли я вопроса не понял, то ли ответ таков:

App.jar
           META-INF/MANIFEST.MF
           pack/MainClass.class
           rs.jar

MANIFEST.MF
Код

Manifest-Version: 1.0
Main-Class: pack.MainClass
Class-Path: rs.jar


pack/MainClass.java
Код

package pack;

import FunctionedNode.FunctionNode;

public class MainClass {

    
    public static void main(String[] args) {

        FunctionNode node = new FunctionNode();
        System.out.println(node);      
        
    }
}



можно конечно изврат устроить типа
Код

FunctionNode n = (FunctionNode)Class.forName("FunctionedNode.FunctionNode").newInstance();


И в package name зря прописные буквы используете.

Да и вообще, как это к EE относится?


Это сообщение отредактировал(а) drG100k - 8.4.2010, 22:47
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0418 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.