Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse插件-如何使用类名确定扩展或实现的类?_Java_Eclipse_Plugins_Classloader - Fatal编程技术网

Java Eclipse插件-如何使用类名确定扩展或实现的类?

Java Eclipse插件-如何使用类名确定扩展或实现的类?,java,eclipse,plugins,classloader,Java,Eclipse,Plugins,Classloader,我正在开发一个Eclipse插件程序 现在我需要列出扩展或实现的类名 来自给定的类名 关于更多细节,这是我的插件应该做的。 eclipse插件的用户在对话框向导的文本框中输入一个类名和包名,如com.test.TestClass。 程序查找jar文件中的所有类和用户定义的类(用户使用插件创建的)。 最后,插件找到并返回扩展或实现的类 下面是我的代码 public List<String> getExtendedClasses(List<String> classList,

我正在开发一个Eclipse插件程序 现在我需要列出扩展或实现的类名 来自给定的类名

关于更多细节,这是我的插件应该做的。 eclipse插件的用户在对话框向导的文本框中输入一个类名和包名,如com.test.TestClass。 程序查找jar文件中的所有类和用户定义的类(用户使用插件创建的)。 最后,插件找到并返回扩展或实现的类

下面是我的代码

public List<String> getExtendedClasses(List<String> classList, String superClassName) throws ClassNotFoundException {
    List<String> extendedClasses = new ArrayList<String>();

    ClassLoader cls = ClassLoader.getSystemClassLoader();
    Class<?> superClass = cls.loadClass(superClassName);

    for(String name : classList){
        System.out.println("subClassName : " + name);
        Class<?> testClass = cls.loadClass(name);

        if(superClass.isAssignableFrom(testClass)){
            extendedClasses.add(name);
        } 
    }

    return extendedClasses;
}

这些包含类的罐子在哪里?它们在插件类路径上吗?你确定没有错贴名称吗?(
com.test.TestClass
在您的描述中,而不是
com.esum.test.ydkim.TestClass
在堆栈跟踪中)@greg-449嗯,jars。。不在插件类路径中,但在默认输出文件夹中。。。其实这是我的另一个问题。在导出插件之前,必须设置插件类路径。我说得对吗。。?如果这是正确的,classloader是否可以在输出文件夹中加载类?我的意思是,插件用户编写的类是否可能由类加载器加载,以便区分实现类或扩展类?谢谢你的评论。@rlegendi是的,我确信我拼写的名字是正确的。TestClass只是一个例子来解释这种情况。谢谢你的评论。好吧,我想我需要使用URLClassloader而不是System Classloader。。很抱歉造成混淆,非常感谢您的评论!!
java.lang.ClassNotFoundException: com.esum.test.ydkim.TestClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.esum.xtrusesb.floweditor.utils.ClassSearchWizard.getExtendedClasses(ClassSearchWizard.java:158)
at com.esum.xtrusesb.floweditor.comps.XMLTransformerPropertyWindow$3.widgetSelected(XMLTransformerPropertyWindow.java:297)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4170)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:826)
at org.eclipse.jface.window.Window.open(Window.java:802)
at com.esum.xtrusesb.floweditor.parts.ShapeEditPart.performRequest(ShapeEditPart.java:614)
at org.eclipse.gef.tools.SelectEditPartTracker.performOpen(SelectEditPartTracker.java:194)
at org.eclipse.gef.tools.SelectEditPartTracker.handleDoubleClick(SelectEditPartTracker.java:137)
at org.eclipse.gef.tools.AbstractTool.mouseDoubleClick(AbstractTool.java:1069)
at org.eclipse.gef.tools.SelectionTool.mouseDoubleClick(SelectionTool.java:527)
at org.eclipse.gef.EditDomain.mouseDoubleClick(EditDomain.java:231)
at org.eclipse.gef.ui.parts.DomainEventDispatcher.dispatchMouseDoubleClicked(DomainEventDispatcher.java:291)
at org.eclipse.draw2d.LightweightSystem$EventHandler.mouseDoubleClick(LightweightSystem.java:518)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1057)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4170)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3759)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
at org.eclipse.equinox.launcher.Main.main(Main.java:1426)