Java: почему код, упакованный в jar-файл, препятствует доступу внешних классов?

У меня есть система плагинов для моего приложения Java. Я вызываю внешний класс с загрузчиком классов URL. Эта часть работает хорошо, как когда мое приложение запускается как файлы классов, так и когда мое приложение находится в форме JAR. Проблема, с которой я сталкиваюсь, заключается в том, что файлы плагинов могут выполнять собственный независимый код, но они создают JPanel. Когда я пытаюсь добавить этот JPanel к JPanel, который находится в основном классе приложения, я получаю исключение нулевого указателя, ссылающееся на основной класс. (com.cpcookieman.app.Main) Но этого не произойдет, если я запускаю файлы классов для приложения, только когда оно упаковано. Как я могу решить это?

Почему мой код, упакованный в файл jar, не позволяет внешним классам получать доступ к классам внутри jar?

РЕДАКТИРОВАТЬ: По запросу, трассировки стека.

java.lang.NullPointerException
    at TestPlugin2.Main.<init>(Main.java:23)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.cpcookieman.ph.PluginLoader$2.run(PluginLoader.java:74)
    at java.lang.Thread.run(Unknown Source)

РЕДАКТИРОВАТЬ 2: код загрузки класса

    String pluginsPath;
    if (Main.os.equals("Windows"))
    {
        pluginsPath = "C:\\plugins\\";
    }
    else
    {
        pluginsPath = "~/plugins/";
    }
    File file = new File(pluginsPath);
    if (!file.exists())
    {
        System.out.println("DEBUG: Plugin path could not be found!");
    }
    try
    {
        URL url = file.toURI().toURL();
        final URL[] urls = new URL[]{url};
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                try
                {
                    ClassLoader cl = new URLClassLoader(urls);
                    Class plugin = cl.loadClass(text + ".Main");
                    plugin.newInstance();
                    close();
                }
                **snip catch statements**
            }
        }).start();
    }
    **snip catch statements**

Плагин загружается с использованием его конструктора и создает панель для добавления к фрейму, который находится внутри одного из классов в файле JAR. JAR является основным приложением, если кто-то запутался в этом.

Ответы на вопрос(1)

Ваш ответ на вопрос