こんにちは私は私のプログラムにクラスファイルをロードするコードを持っています。私が実行するとき/それをEclipseからデバッグするとき、私はいつも私のbinディレクトリからクラスファイルを選んだ。私のプログラムをJARファイルにコンパイルすると、ロードは機能しません。 ものは、このエラーは私が間違ってやっている何Javaでの動的クラスロードに関する問題
java.lang.ClassNotFoundException: Tagging.Tag_by_lenght_filename
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at Tagging.Tags_all.load_dynamic_tag(Tags_all.java:233)
at Command.LoadTagCommandExecutor.execute(LoadTagCommandExecutor.java:24
)
at GUI.DropBox$2.handleEvent(DropBox.java:248)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at GUI.DropBox.showGUI(DropBox.java:168)
at GUI.Try_control$5.handleEvent(Try_control.java:135)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
at GUI.Try_control.<init>(Try_control.java:161)
at GUI.NewSWTApp$2$1$2.run(NewSWTApp.java:121)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4041)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3660)
at Service.Main.main(Main.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
を取得している
public void load_dynamic_tag(String file_path)
throws MalformedURLException, ClassNotFoundException,
InstantiationException, IllegalAccessException {
File f = new File(file_path);// some folder's path
URI uri = f.toURI();
URL url = uri.toURL();
URL[] urls = new URL[] { url };
// create a new class loader for this directory
ClassLoader cl = new URLClassLoader(urls);
// load the class file "MyAlgo.class"
String name = f.getName();
name = name.substring(0, name.lastIndexOf("."));
name = "Tagging." + name;
@SuppressWarnings("unchecked")
Class<TaggingStrategy> c = (Class<TaggingStrategy>) cl.loadClass(name);
// TaggingStrategy tag=c.newInstance();
tag = c.newInstance();
}
クラスファイルをロードする行がありますか? tnx allot
私はを使用してフルパスを送信しようとしました。Path p = Paths.get(class_file_path); \t \tファイルclass_file = new File(p.toAbsolutePath()。toString()); しかし、それは動作しませんでした –
はい、私の答えを再度読んでください。クラスファイルへのパスは無駄です。ディレクトリまたはjarファイルをコンパイルまたは実行するためにクラスパスに追加する場合とまったく同じように、ディレクトリまたはjarファイルを指定します。例えば。クラスがcom.foo.Barの場合、ファイルは /com/foo/Bar.classになります。クラスバーを見つけるには、 ""をClassLoaderに渡す必要があります。 –