![](/img/trans.png)
[英]ClassNotFoundException when trying to load classes from JAR
[英]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.