カスタムクラスローダーを使用してリソースバンドルをロードする

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();

}

}

私はjarファイルから必要なすべてのクラスファイルをロードするClassLoader(上に掲載)を持っています。これにはMySQLのjavaドライバファイルも含まれています。これらのファイルをロードしようとすると、com.mysql.jdbc.LocalizedErrorMessagesにエラーが発生します。これはResourceBundleです。私の質問は、カスタムクラスローダーを使ってリソースバンドルをロードする方法です。ご協力いただきありがとうございます。

3
何が尋ねられているかやっているか分からない。 getBundle を呼び出すコードがもっと面白いかもしれません。 java.net.URLClassLoader.newInstance を使用するだけでクラスローダーを作成できます。
追加された 著者 Tom Hawtin - tackline,
どのようにあなた自身のJarクラスローダを書いたのですか?あなたはすでにこれを行うことができます。
追加された 著者 Nate W.,

1 答え

findResource()/ findResources()メソッドをオーバーライドして実装する必要があります。これらのメソッドは、リソース・バンドル・プロパティー・ファイルおよびその他の非クラス・ファイルをロードするときに使用されます。

4
追加された
@ウィリアムキャリー:答えとしてこれを受け入れる!
追加された 著者 Nate W.,
それは魅力のように働いた。完璧な修正、ありがとう。
追加された 著者 William Carey,
これの補足として、私のためにこれを動作させるために、getResourceメソッドをオーバーライドし、その中にsuper.findResourceを呼び出す必要がありましたが、クラスローダーがURLClassLoaderを拡張しています。
追加された 著者 Bucky24,