0
그래서 누구나 폴더에 넣는 .jar 파일에서 특정 .class 파일을로드하려고 시도하기로했습니다. (지금은 내 Test.jar 만로드합니다.) 문제는 이러한 클래스가 자바 프로젝트에서 인터페이스를 구현한다는 것이며, 클래스 "Klass"는 그렇지 않다는 오류가 발생한다는 것입니다. 있다. 어떻게 로더가 자신의 것을 사용하는 대신 로더를로드 할 수 있습니까?인터페이스가 하위 클래스 .jar에 없을 때 하위 클래스 가져 오기
String filePath = new String("C:/classes/Test.jar");
URL myJarFile = null;
try {
myJarFile = new URL("file:///"+filePath);
URL[] urls = new URL[]{myJarFile};
// Create a new class loader with the directory
ClassLoader cl = new URLClassLoader(urls);
// Load in the class; MyClass.class should be located in
// the directory file:/c:/myclasses/com/mycompan
Class cls = cl.loadClass("me.bluejelly.survivalgames.classes.Test");
try {
Klass klass = (Klass) cls.newInstance();
klass.create(arg0.getName());
Main.listeners.put(arg0.getName(), klass);
Bukkit.getPluginManager().registerEvents(klass, instance);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
그리고 이것은 내가 해요 파일의 코드를 IT : 는 .JAR를로드하기 위해
코드를 (또한,이 내가이 사실이라면 난 아무 생각이 없다, 그것은 일을 생각 것입니다) 로드하려고 시도 :
package me.bluejelly.survivalgames.classes;
import me.bluejelly.survivalgames.Main;
import me.bluejelly.survivalgames.def.Klass;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.inventory.ItemStack;
public class Test implements Klass {
private String ownerName;
@Override
public void create(String pName) {
this.ownerName = pName;
Main.listeners.put(this.ownerName, this);
}
@Override
public void destroy() {
if(Main.listeners.containsKey(this.ownerName)) {
Main.listeners.remove(ownerName);
}
HandlerList.unregisterAll(this);
}
@Override
public Material getIcon() {
return null;
}
@Override
public ItemStack[] getStartingItems() {
return null;
}
@EventHandler
public void onPlayerMove(PlayerMoveEvent event) {
if(event.getPlayer().getName().equals(ownerName)) {
Bukkit.broadcastMessage("test");
}
}
}
오, 좋아. 내가 집에 갈 때 나는 그것을 시험 할 것이다. 나는 일하기 위해 서둘러야했다. – 9903286
감사합니다. – 9903286