Java 更改功能原型会生成;无法解决。它是间接引用的;错误

Java 更改功能原型会生成;无法解决。它是间接引用的;错误,java,eclipse-plugin,Java,Eclipse Plugin,在研究这个问题的过程中,我遇到了很多帖子,这些帖子都出现了与本文标题类似的错误。这个问题的不同之处在于,只有当我试图将字符串传递给我正在开发的插件类的函数时,错误才会出现 我确实发现了一篇可能暗示我的问题的帖子 虽然我正在运行Eclipse3.6.1,但我认为这个问题是关于通用Java的。我的主要问题是,我在一个Eclipse项目中有一个类(类a),它在Eclipse插件项目中使用另一个类(类B)。A无法调用任何需要字符串作为参数之一的类B函数。我生成了一个使用类B的虚拟类C(以及一个虚拟Jav

在研究这个问题的过程中,我遇到了很多帖子,这些帖子都出现了与本文标题类似的错误。这个问题的不同之处在于,只有当我试图将字符串传递给我正在开发的插件类的函数时,错误才会出现

我确实发现了一篇可能暗示我的问题的帖子

虽然我正在运行Eclipse3.6.1,但我认为这个问题是关于通用Java的。我的主要问题是,我在一个Eclipse项目中有一个类(类a),它在Eclipse插件项目中使用另一个类(类B)。A无法调用任何需要字符串作为参数之一的类B函数。我生成了一个使用类B的虚拟类C(以及一个虚拟Java项目),但仍然存在相同的问题。让我详细说明一下

我在Eclipse中有两个项目。其中一个是Eclipse插件项目,它包含一个类,该类本质上是一个绘图仪,它扩展了org.Eclipse.ui.part.ViewPart。我正在从另一个非插件项目实例化这个plotter类,该项目不能调用plotter类中任何期望字符串作为参数之一的成员函数

例如,以下代码段:

Plotter myPlotter = new Plotter();    
myPlotter.plot();
从我的非插件项目运行时正常工作。但是,如果我修改plot以使用字符串(例如,标签),或者甚至创建一个打印字符串的新函数:

Eclipse在printMe和plot下给我红色下划线,指示错误。当我将鼠标悬停在printMe上时,会出现以下错误: 无法解析类型org.eclipse.ui.part.ViewPart。它是从必需的.class文件间接引用的

为了更好地理解这个问题,我在插件项目中构建了另外两个类来测试这个问题,一个类的超类是java.lang.Object,另一个类的超类是org.eclipse.ui.part.ViewPart。我可以从基于对象的类调用带有字符串参数的函数,但不能从基于ViewPart的类调用带有字符串参数的函数。因此,它与ViewPart有关(我可以深入到后续的超类,如果该类继承自EventManager,则仍然存在问题)。为了好玩,我试着改变类,这样它就扩展了向量,我的问题就消失了。在我看来,问题似乎与EventManager和/或ViewPart有关


如果您有任何见解,我们将不胜感激。

好的。在我阅读问题时,您试图实例化一个对象,其超类(ViewPart)不在类路径中,即使该部分本身在类路径中。通常这不会是一个问题,但是引用项目不是一个插件,因此它的类路径中没有PDE容器来提供这些其他类

我只能建议您不要直接实例化该类,而是从绘图仪插件中类似工厂的类获取实例。为此,请执行以下操作:

  • 在绘图仪插件中创建接口
  • 使绘图仪实现此接口
  • 使工厂返回接口的实例
这应该让你做你想做的事


顺便说一句。。。实例应定义要在绘图仪上调用的任何方法。

确定。在我阅读问题时,您试图实例化一个对象,其超类(ViewPart)不在类路径中,即使该部分本身在类路径中。通常这不会是一个问题,但是引用项目不是一个插件,因此它的类路径中没有PDE容器来提供这些其他类

我只能建议您不要直接实例化该类,而是从绘图仪插件中类似工厂的类获取实例。为此,请执行以下操作:

  • 在绘图仪插件中创建接口
  • 使绘图仪实现此接口
  • 使工厂返回接口的实例
这应该让你做你想做的事


顺便说一句。。。实例应定义要在绘图仪上调用的任何方法。

这不是运行时问题,因此如何运行程序并不重要。您会遇到编译错误

Chris Gerken是对的,但你没有尝试他的解决方案,所以我将尝试解释为什么他是对的

当Java编译器查看您的代码时,它需要知道您调用的类的定义。有时它还需要知道所有继承成员的定义(例如,在解析重载方法调用时)。你好像打到那个案子了。现在,如果类路径只包含绘图仪项目,而不包含定义
视图部件的JAR,则会失败并显示此消息

您可以通过在类路径上添加正确的jar来解决这个问题(您需要稍微修改一下,以找出它是在哪个jar中定义的)。否则,可以导出绘图仪类路径上的所有库(项目属性/Java生成路径,顺序和导出选项卡-全选)


Chris的解决方案通过创建一个新接口(不扩展任何内容)来解决这个问题,该接口由plotter项目托管。使用该接口没有依赖项(但您需要能够创建依赖项,因此需要工厂)。

这不是运行时问题,因此如何运行程序并不重要。您会遇到编译错误

Chris Gerken是对的,但你没有尝试他的解决方案,所以我将尝试解释为什么他是对的

当Java编译器查看您的代码时,它需要知道您调用的类的定义。有时它还需要知道所有继承成员的定义(例如,在解析重载方法调用时)。你好像打到那个案子了。现在,如果类路径只包含绘图仪项目,而不包含定义
视图部件的JAR,则会失败并显示此消息

您可以通过在类路径上添加正确的jar来解决这个问题(您需要稍微修改一下,以找出它是在哪个jar中定义的)
Plotter myPlotter = new Plotter();
String theString = "I'm the String";
myPlotter.plot(theString);
myPlotter.printMe(theString);