Eclipse内容辅助功能在某些代码部分无法工作

4

我正在使用Eclipse Juno,一直很顺利,但最近代码补全只在某些部分失效了。下面的代码展示了我所说的情况:

mWTBatch.setText("Here content assist works");
medCopyBtn.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        mWTBatch.setText(mRTBatch.getText());
        mWTExp.setText(mRTExp.getText());
        mWTName.setText(mRTName.getText());
        mWTQuantity.setText(mRTQuantity.getText());
        /* Here content assist is not working */
    }
});
mWTBatch.setText("Here it is working again");

这段代码只在我的类的一个方法中。问题是,它在类的方法中运行良好,但在对象(new ActionListener(){})中,则返回“没有默认建议”。当我使用“Ctrl +空格”或在要获取建议的对象后键入“。”时,就会出现这种行为。我已经在这里搜索了解决方案并在Google上搜索了它,但找不到解决方案。我已经尝试过以下方法:
  • 单击 Window->Preferences->Editor->Content Assist->Advanced 并勾选 Java Proposals 。但没有起作用。我还尝试自己勾选它,而不仅仅使用Restore Defaults。我也尝试了来自其他表的 Java Proposals ,但什么都没有。最后,我尝试了所有带有 Java 的字段。但仍然无效。
  • 完全删除了我的工作区文件夹,创建了一个新的,并导入了我的项目。由于我的项目来自SVN存储库,因此我在导入时使用了“trunk”文件夹内的项目文件夹,但我没有将文件夹内容复制到工作区(我需要它保存在存储库中)。但仍然无效,它仍然显示错误。
  • 我将上述代码的相同情况复制到另一个不同项目的另一个类中,该项目也被导入到工作区,并将其内容复制到其中。那个项目的内容辅助功能有效
  • 然后,我重新导入了带有原始代码的项目,但这次将其内容复制到了工作区(这意味着它与SVN存储库没有关系)。但仍然无效。
  • 我还检查了 ctrl+space 是否绑定到Eclipse设置上的内容辅助,并且它是可以的。我还检查了它是否与Windows 7语言栏的高级键设置无关。我在互联网上看到过这种问题,但这不是我的情况。
  • 我甚至在工作区中创建了一个新的Java项目,并逐个复制了旧项目的.java文件,手动设置了所有构建路径,最终它仍然无效。
对于以上前4种情况,我还清理了项目并关闭和重新打开了它们,每次操作后不要忘记刷新。有谁能告诉我如何解决这个问题吗?我希望找到解决此问题的方法,以便其他人不会像我一样花费两天时间。我认为我的问题很重要,因为我在这里汇集了通过搜索问题和从StackOverflow中找到的许多可能的解决方案,但仍然没有解决这个问题。

同样的问题。我想不出来怎么解决。有一天可以用,另一天就坏了。我要去在www.ihateeclipse.com上留言评论。 - Gaurav
我曾经看到过在代码存在语法错误的情况下,内容辅助功能失效的情况。 - Raedwald
我简直无法相信,到了2022年,在整个互联网上仍然没有一个关于这个问题的答案。这么多人在如此多的网站上提问,但在整个互联网上仍然没有一个单一的逻辑解释,说明是什么原因导致了这种行为,以及如何修复它。 - LAX1DUDE
2个回答

2
我之前遇到了这个问题,看完这篇帖子后觉得只能忍受它。不过,我找到了一个“hack”的解决方法:
mWTBatch.setText("Here content assist works");
medCopyBtn.addActionListener(   //<---------------------- Problem arises because we're inside a function declaration ...
    new ActionListener()
    {   // <--------------------------------------------- ... yet we're trying to write a function
        public void actionPerformed(ActionEvent e)
        {
            /* Here content assist is not working */
        }
    }
);
mWTBatch.setText("Here it is working again");

从内容助手的角度来看,这是完全错误的,因此我们需要给它一些帮助:

mWTBatch.setText("Here content assist works");
medCopyBtn.addActionListener(
    new ActionListener()
        // <--------------------------------------------- CURLY BRACKET MISSING
        public void actionPerformed(ActionEvent e)
        {
            /* Here content assist IS WORKING */
        }
    }
);
mWTBatch.setText("Here it is still working");

这显然会在编译时产生错误,但它使您完全可以使用内容辅助功能来声明函数的其余部分。同时,无论您删除函数声明内部的哪个大括号,都没有关系,只要是一个左大括号。
另外一个要点是,如果你只移除了开头的左大括号,那么对于大多数情况下Eclipse将不会自动添加另一个右大括号(因为当你输入新的左大括号时,你已经平衡了左右两个大括号)。您可以通过删除右花括号来解决这个问题,但是这样你就必须记得再放回两个大括号。
希望这些可以帮助到过去一年中获得1165次浏览的人 =)

0
在开始菜单中搜索“更改显示语言”。'更改键盘' > 查看是否在'常规'下有任何非英语键盘 > '已安装的服务'。如果您不止使用英语,则按Ctrl + Spacebar将焦点从Eclipse更改为任务栏上的语言选择器。如果这是您的问题,请从列表中删除任何其他键盘语言。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接