簡體   English   中英

如何使用Java加載插件類?

[英]How do i load a plugin class with Java?

我創建了一個小應用程序,它從一個文件夾中加載類,將它們顯示在一個列表中,當你點擊它時,它會在其中顯示JPanel

所以我創建了一個擴展JPanel的API類( BaseApp )。 我還創建了一個測試類,它extends BaseApp並使用了API。

現在,我的問題是,每次我點擊TestApp ,它都會給我這個Exception ...

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Class     cannot be cast to me.Delocaz.SuperApp.BaseApp
at me.Delocaz.SuperApp.AppSelect$2.mouseClicked(AppSelect.java:76)
at java.awt.AWTEventMulticaster.mouseClicked(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

我曾試圖投的Class從我的類加載器我陷入了BaseApp 如果沒有它崩潰,我該怎么做?

如果你需要它,這是我的FileClassLoader

package me.Delocaz.SuperApp;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileClassLoader extends ClassLoader {
    public Class<?> findClass(File f) {
        byte[] b = loadClassData(f);
        try {
        return defineClass(null, b, 0, b.length);
        } catch (ClassFormatError ex) {
        return null;
        }
    }
    private byte[] loadClassData(File f) {
        FileInputStream fin;
        byte fileContent[] = new byte[(int)f.length()];
        try {
            fin = new FileInputStream(f);
            fin.read(fileContent);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileContent;
    }
}

此外,這是鑄造發生的地方:

Object c = cl.findClass(new File(***CLASS FILE LOCATION***));
System.out.println(c);
switchApp((BaseApp) c);

類型Class的實例不是BaseApp類型的實例,因此轉換失敗。 您需要實例化該類以獲取BaseClass類型的實例,然后您可以將其強制轉換

嘗試在類實例上調用newInstance()以獲取已加載類的新實例(基於其默認構造函數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM