Java 无法检索';的正确封闭实例;这';
不幸的是,我无法发布完整的代码,也无法用更小的示例重现它。 我希望这个解释足够了 如果我尝试在断点处从“var”检索值,我总是会收到以下消息:Java 无法检索';的正确封闭实例;这';,java,eclipse,debugging,jboss,Java,Eclipse,Debugging,Jboss,不幸的是,我无法发布完整的代码,也无法用更小的示例重现它。 我希望这个解释足够了 如果我尝试在断点处从“var”检索值,我总是会收到以下消息: Evaluation failed. Reason(s): Unable to retrieve the correct enclosing instance of 'this' 变量视图的前两个级别如下所示: this MENU$1 (id=291) this$0 MENU (id=292) this$0 M
Evaluation failed. Reason(s):
Unable to retrieve the correct enclosing instance of 'this'
变量视图的前两个级别如下所示:
this MENU$1 (id=291)
this$0 MENU (id=292)
this$0 MENU (id=292)
无论出于何种原因,都有两个此$0条目具有相同的id
我可以在variables视图中查看var的值,但无法在display或expressions视图中或直接在代码中执行“var”、“this.var”或任何涉及var的内容
public class MENU{
private String var;
...
private void menup() {
this.main("menup",
new MainProcess() {
public void run() {
System.out.println(var); // breakpoint here
...
}
}
);
}
...
}
MainProcess.run()的调用流有点奇怪,我所能提供的就是这个stacktrace:
MENU$1.run() line: 173
MENU(Application).mainRun(Application$Main) line: 2688
MENU(Application).main() line: 2529
MENU(MainApplication).runApplication() line: 54
ApplicationHandler.dxfr(MainApplication, Record) line: 256
ApplicationSession$ApplicationRunner.run() line: 138
Thread.run() line: 662 [local variables unavailable]
编辑:
显示视图中的执行结果:
this This actually seems to successfully return this.toString()
this.var cannot be resolved or is not a field
var Unable to retrieve the correct enclosing instance of 'this'
MENU.this.var Unable to retrieve the correct enclosing instance of 'this'
这实际上似乎成功地返回了这个.toString()
this.var无法解析或不是字段
var无法检索“this”的正确封闭实例
MENU.this.var无法检索“this”的正确封闭实例
代码正在JBoss 4应用程序服务器中运行。通过以下语句:
...
this.main("menup",
new MainProcess() {
public void run() {
System.out.println(var); // breakpoint here
...
创建一个匿名类,该类扩展/实现MainProcess(取决于它是类还是接口)。一般来说,匿名类应该能够通过菜单访问父类的字段。正如其他人建议的那样,这个.var
。由于这似乎不起作用,您可以尝试:
MENU$1.this.var
如果这样做有效,这意味着您在匿名类中有另一个var
字段(很可能继承自MainProcess
)
总的来说,我强烈建议您使用显式定义的内部类,而不是匿名类-这使事情更加清楚,并有助于避免混淆:
public class MENU{
private String var;
...
private void menup() {
this.main("menup", new MyMainProcess() );
}
...
private class MyMainProcess extends MainProcess {
public void run() {
System.out.println(var); // breakpoint here
...
}
}
}
您是否尝试过
菜单。这个.var
?是的,它也不起作用。它给出的错误与“var”相同。MENU$1.this.var导致“MENUA$1无法解析为类型”MainProcess没有任何变量。它是一个实现Runnable()的抽象类。MainProcess.run()直接从Application.mainRun()调用,因为它不应该在另一个线程中运行。我试图用所有相关类的精简版本来运行上面的代码,但到目前为止,我还无法重现这个问题。精简后的版本按预期工作,这就是我没有将它们附加到问题的原因。如果使用内部类(我用一个示例更新了上面的答案),会怎么样?这有用吗?是的,有用。我想没有人会喜欢这种变通方法,但这总比根本无法调试要好。谢谢。不客气,很高兴它起作用了。再次,我建议您尽可能避免匿名类。它们编写速度更快,但会导致混乱,使代码更难阅读。