在研究这个问题时,我遇到了很多帖子,这些帖子的错误类似于这篇文章的标题。这个问题的不同之处在于,当我尝试将 String 传递给我正在开发的插件类的函数时,错误才会出现。
我找到了一篇可能暗示我的问题的帖子RAP: How to access Object in ViewPart。
虽然我正在运行Eclipse 3.6.1,但我认为这个问题与普通Java有关。我的主要问题是我在一个Eclipse项目中有一个类(A类),它在Eclipse插件项目中使用另一个类(B类)。 A不能调用任何需要 String 作为参数之一的B类函数。我生成了一个使用B类的虚拟类C(以及一个虚拟Java项目),我仍然遇到同样的问题。让我详细说明一下。
我在Eclipse中有两个项目。其中一个是Eclipse插件项目,它包含一个本质上是绘图仪的类,并且扩展了 org.eclipse.ui.part.ViewPart 。我正在从另一个非插件项目中实例化这个绘图仪类,该项目无法调用绘图仪类中任何期望 String 作为参数之一的成员函数。
例如,以下代码段:
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 和 plot 下给出了红色下划线,表示错误。当我将鼠标悬停在 printMe 上时,我收到错误消息: 无法解析类型org.eclipse.ui.part.ViewPart。它是从所需的.class文件
间接引用的为了更好地理解这个问题,我在插件项目中构建了另外两个类来测试问题,一个超类是 java.lang.Object ,另一个超类是< EM>类org.eclipse.ui.part.ViewPart 。我可以使用基于 Object 的类中的 String 参数调用函数,但是我不能使用String作为来自 ViewPart 的类的参数调用函数。所以它与 ViewPart 有关(我可以深入研究后续的超类,如果该类继承自 EventManager ,仍会遇到问题)。只是为了踢,我尝试更改类,所以它扩展 Vector ,我的问题消失了。在我看来,问题与 EventManager 和/或 ViewPart 有关。
非常感谢任何见解。
答案 0 :(得分:1)
这不是运行时问题,因此您运行程序的方式无关紧要。您收到编译错误。
Chris Gerken是对的,但你没有尝试他的解决方案,所以我会试着解释他为什么是对的。
当Java编译器查看您的代码时,它需要知道您调用的类的定义。有时它还需要知道所有继承成员的定义(例如,在解析重载方法调用时)。你似乎遇到了这种情况。现在,如果您的类路径仅包含您的绘图仪项目,而不是定义ViewPart
的jar,则它将失败并显示此消息。
您可以通过在类路径中添加正确的jar来解决它(您需要调整一下以找出它所定义的jar)。否则,您可以在绘图仪类路径上导出所有库(项目属性/ Java构建路径,订单和导出选项卡 - 全选)。
Chris的解决方案是通过创建一个由绘图仪项目托管的新界面(不扩展任何东西)来解决这个问题。使用该接口没有依赖关系(但您需要能够创建一个,因此工厂)。
答案 1 :(得分:0)
行。当我读到这个问题时,你试图实例化一个超类(ViewPart)不在类路径中的对象,即使该部分本身在类路径中。通常情况下这不是问题,但引用项目不是插件,因此它的类路径中没有PDE容器来提供这些其他类。
我只能建议您不要直接实例化该类,而是从绘图仪插件中的类似工厂的类中获取实例。这样做:
这可以让你做你想做的事。
btw ...实例应该定义你想在绘图仪上调用的任何方法。