1

在研究这个问题的过程中,我遇到了很多帖子,这些帖子都出现了与本文标题类似的错误。这个问题的不同之处在于,该错误仅在我尝试将String传递给我正在开发的插件类的函数时出现。

我确实找到了一篇RAP:如何访问 ViewPart中的对象,这可能暗示了我的问题。

虽然我正在运行 Eclipse 3.6.1,但我认为这个问题是关于一般 Java 的。我的主要问题是我在一个 Eclipse 项目中有一个类(A 类),它在 Eclipse 插件项目中使用了另一个类(B 类)。A 不能调用需要String作为参数之一的 B 类的任何函数。我生成了一个使用 B 类的虚拟类 C(以及一个虚拟 Java 项目),但我仍然遇到同样的问题。让我详细说明一些。

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

例如,以下代码片段:

Plotter myPlotter = new Plotter();    
myPlotter.plot();

从我的非插件项目运行时正常工作。但是,如果我修改plot以期望一个String(例如,对于一个标签),或者甚至创建一个打印String的新函数:

Plotter myPlotter = new Plotter();
String theString = "I'm the String";
myPlotter.plot(theString);
myPlotter.printMe(theString);

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

为了更好地理解这个问题,我在插件项目中构建了另外两个类来测试这个问题,一个超类是java.lang.Object,另一个超类是org.eclipse.ui.part.ViewPart。我可以从基于Object的类中调用带有String参数的函数,但我不能从基于ViewPart的类中调用带有 String 作为参数的函数。所以它与ViewPart 有关(我可以深入到后续的超类,如果该类继承自EventManager仍然存在问题)。只是为了好玩,我尝试更改类以扩展Vector我的问题消失了。在我看来,问题与EventManager和/或ViewPart 有关

任何见解将不胜感激。

4

2 回答 2

1

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

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

当 Java 编译器查看您的代码时,它需要知道您调用的类的定义。有时它还需要知道所有继承成员的定义(例如,在解决重载方法调用时)。你似乎遇到了这种情况。现在,如果您的类路径仅包含您的绘图仪项目,而不包含定义 的 jar,ViewPart它将失败并显示此消息。

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

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

于 2012-09-17T06:34:27.513 回答
0

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

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

  • 在绘图仪的插件中创建接口
  • 使绘图仪实现此接口
  • 使工厂返回接口的一个实例。

这应该让你做你想做的事。

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

于 2012-09-12T21:57:50.197 回答