実行時に.jarファイルからアプリケーションを起動しようとしています。だから私はこのスレッドでのコードに続く: How to load a jar file at runtime.jarからクラスをロードしようとするとClassCastExceptionが発生する
をしかし、私は、このエラーが生じています:ここで
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'を実装していないと不平を言っているようです。それは本当に事実ですか?ほとんどのJavaアプリケーションの主なクラスは実際には 'Runnable'を実装していないことに注意してください。 –
'Runnable'は' LaTeXDraw'の*サブクラスではありませんか?あなたが['java.lang.Runnable'](https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html)を参照していると仮定すると、できません。 'asSubclass()'は*ダウンキャスト*用です。もし 'LaTeXDraw'が' Runnable'を実装していれば、それはアップキャストになります。特に 'Runnable'がインターフェースであることを考えると' Class'をキャストする必要はありません。 。 – Andreas
LaTeXDrawクラスのクラス署名を共有してください –