簡體   English   中英

嘗試從.jar加載類時發生ClassCastException

[英]ClassCastException when trying to load a class from a .jar

我正在嘗試從.jar文件在運行時啟動應用程序。 因此,我遵循了該線程中的代碼: 如何在運行時加載jar文件

但我有這個錯誤:

Exception in thread "main" java.lang.ClassCastException: class net.sf.latexdraw.LaTeXDraw
    at java.lang.Class.asSubclass(Unknown Source)
    at LatexLauncher.<init>(LatexLauncher.java:17)
    at LatexLauncher.main(LatexLauncher.java:26)

這是代碼,與上面的線程完全相同:

File path = new File("pathToMyJAR/lib/LaTeXDraw.jar");
System.out.println(path.exists()); //return true
ClassLoader loader = URLClassLoader.newInstance(
        new URL[] { path.toURI().toURL() },
        getClass().getClassLoader()
);
Class<?> clazz = Class.forName("net.sf.latexdraw.LaTeXDraw", true, loader);
Class<? extends Runnable> runClass = clazz.asSubclass(Runnable.class);
Constructor<? extends Runnable> ctor = runClass.getConstructor();
Runnable doRun = ctor.newInstance();
doRun.run();

上面的代碼在LatexLauncher構造函數中。 引發錯誤的行是:

Class<? extends Runnable> runClass = clazz.asSubclass(Runnable.class);

這是一個Eclipse項目,我要運行的.jar文件位於lib文件夾中。 我要運行的一個(LaTeXDraw)所需的jar在項目的lib/lib/文件夾中。 我不知道該如何解決。

我的最終目標是啟動.jar應用程序,並使Robot類對UI執行操作以進行測試。

歡迎任何幫助,謝謝您的時間

如評論中所述,您的問題很簡單,就是net.sf.latexdraw.LaTeXDraw沒有實現Runnable 我真的不知道你期望發生什么。

使您的Robot類實現Runnable並從那里使用LaTeXDraw

public class Robot implements Runnable
{
    @Override
    public void run()
    {
       LaTeXDraw thing = new LaTeXDraw(); // or whatever
       //...
    }
}

//...
Class<?> clazz = Class.forName("package.Robot", true, loader);
Class<? extends Runnable> runClass = clazz.asSubclass(Runnable.class);
//...

暫無
暫無

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

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