私は現在、サーバー用のプラグインに取り組んでいます。そして、このプラグインでは、別のフォルダーのクラスからメソッドを呼び出す必要があります。次に例を示します。
public class LoadSkill{
private void load(String name, String type, CastingSkill cast){
try{
File folder = new File(this.plugin.getDataFolder(), "Skills");
if(!folder.exists())folder.mkdirs();
File[] files = folder.listFiles();
if(files.length>0){
for(File f : files){
String skill = f.getName();
skill = skill.substring(0, skill.length()-4);
if(name.equals(skill)){
URL loadPath = f.toURI().toURL();
URL[] classUrl = new URL[]{loadPath};
ClassLoader cl = new URLClassLoader(classUrl);
Class loadedClass = Class.forName("run.skill.Start", false, cl);
if(cast!=null)loadedClass.getDeclaredMethod(name, CastingSkill.class).invoke(loadedClass.newInstance(), cast);
else loadedClass.getDeclaredMethod(name).invoke(loadedClass.newInstance());
}
return;
}
}
}catch(Exception e){
System.err.println("Error while trying to load skill " + name + "!");
e.printStackTrace();
}
}
}
これは、skills フォルダー内の jar ファイルになります。注: これは実行可能ではありません。そのため、main(String[] args) メソッドがありません。また、これは唯一のクラスです。はい、パスは上記の要求どおりに一致します。
public class Skill implements Castable{
public void Enable(){System.out.println("Enabled")}
public void Cast(){System.out.println("Casting")}
public void StopAllTimers(){System.out.println("Stopped)}
public void AddListener(){System.out.println("Listening")}
}
ただし、このコードを実行すると、「ClassNotFoundException」が発生し、その理由がわかりません。これを数回確認しましたが、すべて正しいようです。私は何を間違っていますか?