繁体   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