Динамическая загрузка классов: исключение в потоке «основной» java.lang.ClassFormatErrorJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Динамическая загрузка классов: исключение в потоке «основной» java.lang.ClassFormatError

Сообщение Anonymous »

Я пытался выполнить динамическую загрузку классов из jar-файла, к сожалению, произошла ошибка:

Код: Выделить всё

Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1347093252 in class file com/life/Life
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
at gloria.MyClassLoader.loadClass(MyClassLoader.java:38)
at gloria.Gloria.main(Gloria.java:9)
Java Result: 1
Вот мой код:

MainClass.java

Код: Выделить всё

public class MainClass {

public static void main(String[] args) {
try{
ClassLoader parentClassLoader = MyClassLoader.class.getClassLoader();
MyClassLoader classLoader = new MyClassLoader(parentClassLoader);
Class myObjectClass = classLoader.loadClass("com.life.Life");

//create new class loader so classes can be reloaded.
classLoader = new MyClassLoader(parentClassLoader);
myObjectClass = classLoader.loadClass("com.life.Life");

Life life = (Life) myObjectClass.newInstance();
System.out.println("Message: " + life.getMessage());

}catch(Exception e){
e.printStackTrace();
}
}

}
MyClassLoader.java

Код: Выделить всё

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class MyClassLoader extends ClassLoader{

public MyClassLoader(ClassLoader parent) {
super(parent);
}

@Override
public Class loadClass(String name) throws ClassNotFoundException {
if(!"com.life.Life".equals(name))
return super.loadClass(name);

try {
String url = "http://192.168.1.229:8081/downloads/Life.jar";
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();

return defineClass("com.life.Life", classData, 0, classData.length);

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return null;
}

}
Life.java

Код: Выделить всё

public interface Life {

public String getMessage();

}
Что я здесь делаю, так это создаю экземпляр объекта из jar-файла и загружаю его во время выполнения. Что не так с моим кодом? Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/348 ... ormaterror
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»