Загрузка пакетов ресурсов с помощью пользовательского загрузчика классов - PullRequest
3 голосов
/ 28 октября 2011
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class JarClassLoader extends ClassLoader {

private String path;

public JarClassLoader(String path) {
    this.path = path;
}

@Override
public Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException
{
    Class<?> c = findLoadedClass(name);
    if (c == null) {
        try {
            c = findSystemClass(name);
        } catch (Exception e) {
        }

        if (c != null)
            return c;

        try {

            byte data[] = loadClassData(name);
            c = defineClass(name, data, 0, data.length);

            if (c == null)
                throw new ClassNotFoundException(name);
            if (resolve)
                resolveClass(c);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return c;
}

private byte[] loadClassData (String classEntry) throws IOException {
    System.out.println(classEntry);

    String filename = classEntry.replace('.', File.separatorChar) + ".class";
    JarFile jar = new JarFile(path);
    JarEntry entry = jar.getJarEntry(filename);
    InputStream is = jar.getInputStream(entry);
    int data;
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    while ((data = is.read()) != -1) {
        byteStream.write(data);
    }

    return byteStream.toByteArray();

}

}

У меня есть ClassLoader (опубликован выше), чтобы загрузить все файлы классов, которые мне нужны, из банки.Это также содержит файлы драйвера Java MySQL, и когда он пытается загрузить их, я получаю сообщение об ошибке на com.mysql.jdbc.LocalizedErrorMessages, потому что это ResourceBundle.У меня вопрос, как мне загрузить пакеты ресурсов, используя пользовательский загрузчик классов?Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 28 октября 2011

Вам необходимо переопределить и реализовать методы findResource () / findResources (). Эти методы используются при загрузке файлов свойств пакета ресурсов и других файлов, не относящихся к классу.

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