Java 为什么我总是得到;求值必须包含表达式或格式良好的语句块;?

Java 为什么我总是得到;求值必须包含表达式或格式良好的语句块;?,java,eclipse,debugging,Java,Eclipse,Debugging,在我的代码中,我试图在表达式窗口中输出src的值 public void doIt() { String src = "test"; System.out.println(src); } 在月食中。我在第3行设置了一个断点,然后打开“表达式”窗口 我添加一个表达式src进行计算,得到 我已经使用了表达式功能。。。在我多年的Java调试中,有无数次。。为什么现在会发生这种情况 我最近刚刚开始使用EclipseJuno。。对靛蓝。它们是否改变了表达式的工作方式?检查您是否更新了E

在我的代码中,我试图在表达式窗口中输出
src
的值

public void doIt() {
    String src = "test";
    System.out.println(src);
}
在月食中。我在第3行设置了一个断点,然后打开“表达式”窗口

我添加一个表达式
src
进行计算,得到

我已经使用了表达式功能。。。在我多年的Java调试中,有无数次。。为什么现在会发生这种情况


我最近刚刚开始使用EclipseJuno。。对靛蓝。它们是否改变了表达式的工作方式?

检查您是否更新了Eclipse版本,这个问题似乎出现在Eclipse 3.3中


我的Eclipse版本是3.8.2,如果我在第2行计算表达式,那么我也会在第3行收到相同的错误,但计算正确。

如果您的代码使用任何泛型,您可能需要检查此错误:


在Eclipse 4.2之前的所有版本中发生。简而言之,某些泛型表达式会导致Eclipse在任何计算中完全失败(请参见以下示例:)。不确定您的代码是否使用任何泛型,但如果是,可能就是这样。请注意,在类中的某个地方有一个麻烦的泛型就足够了,而在方法中没有必要。我也有同样的问题,我在代码中删除了一个泛型方法。这对我有用

我刚刚花了很多时间来弄清楚,如果您要创建一个包“Foo”,那么在这个包中,您将创建一个名为“Foo”的类,如下所示:

package-Foo;
公开课Foo{
公共Foo(){};
}
在程序中首次使用此类后,您将无法再使用表达式:

导入Foo.Foo//我想这就是魔鬼
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
//调试表达式工作正常
Foo tmp=新的Foo();
//调试表达式不再工作了
}
});
}
此错误可以重新复制到当前的Eclipse Neon 4.7。

(假设您正在编译1.5+代码)我也遇到了同样的问题,下面是我所做的修复:

  • 确保您的java编译器版本为1.5+
  • 修复与该类相关的所有语法/类相关错误。我的类路径中缺少许多依赖项
  • 确保该特定项目的JRE也是1.5+
根据,当类包含一个泛型方法(如

public <T extends something> T myMethod() {};
publicmythod(){};

调试器在第2行、第3行或第4行时,您是否拍摄了该屏幕截图?如果没有,则
src
不可用scope@MarcoForberg是的,我是肯定的。如果超出范围,它会说“src不能解析为变量”。Eclipse有一个坏习惯,天知道为什么,就是在调试过程中,在没有任何合理原因的情况下停止对表达式的求值,以及在表达式格式正确时发生事件等等。很可能是内存问题或幕后的某种损坏。在我的例子中,清理项目并从头开始重建它,关闭并重新打开项目,关闭并重新打开Eclipse(没有特定的顺序),让我走上正轨。如果它是Eclipse中的一个bug,记下Eclipse的精确版本ID可能会有帮助。@sircapsalot,如果在同一个类中有一个名为
src
的方法,或者同一个包中名为
src
的类,或者名为该名称的顶级包,则可能得出结论,您使用的标识符在表达式中不能单独存在。它使用的是泛型。。这是有趣的。高达4.6证实-可能是由于另一个原因,但我看不到滑。