exchangees.jarファイルからクラスファイル(共通のインタフェースを実装していないクラス)をロードし、arraylistに格納しようとしています 以前、私はjarファイルからクラスをロードしてarraylistに格納する方法
package edu.uh.cs.assign2;
import java.io.File;
import java.util.ArrayList;
import edu.uh.cs.iexchangeservices.IExchange;
public class ExchangeManager {
private ArrayList<IExchange> exchangeList = new ArrayList<IExchange>();
public ArrayList<IExchange> findClasses() throws Exception {
File classDirectoryPath = new File(Thread.currentThread()
.getContextClassLoader()
.getResource("exchangeservices".replace('.', '/')).getFile());
return loadExchangeClasses(classDirectoryPath);
}
public ArrayList<IExchange> loadExchangeClasses(File classDirectoryPath)
throws Exception {
if (!classDirectoryPath.exists())
throw new LoadExchangesException("path not found");
String[] exchangeClasses = classDirectoryPath.list();
for (String exchangeClass : exchangeClasses) {
if (exchangeClass.endsWith(".class")) {
Object object = (IExchange) Class.forName(
"exchangeservices"
+ '.'
+ exchangeClass.substring(0,
exchangeClass.length() - 6))
.newInstance();
if (object instanceof IExchange)
exchangeList.add((IExchange) object);
}
}
return exchangeList;
}
}
私が間違っている可能性が、この良いプログラミング実践のようには聞こえません。あなたはこの授業の練習家と何をしたいですか? –
@user jarからクラスをロードするために必要なことは、クラスパスにjarを入れることです: 'java -cp。; myjar.jar'は、実行時にクラスをロードする必要があると感じる理由です? –
ファイルは実際にjarファイルに入っていますか?あなたのコードはディスク上でそれらを探しているようです...? – Adam