【问题标题】:No completions available, strange Eclipse behavior没有可用的完成,奇怪的 Eclipse 行为
【发布时间】:2026-01-12 22:15:02
【问题描述】:

我想我尝试了所有建议的解决方案,但这个 Eclipse 自动完成问题非常特殊:

  1. 我启动 Eclipse,内容辅助工作正常;
  2. 我想在我的 Swing 项目中创建 LineBorder;
  3. 我输入LineBorder panelBorder = new Li,然后按Ctrl+Space;
  4. 没有弹出窗口出现,并且在状态栏中用红色写着“无法完成”;
  5. 我尝试在内容辅助 2 秒前正常工作的元素上按 Ctrl+Space,但它不再工作了。
  6. 在我尝试使用 LineBorder 构造函数之前,我在其他项目上尝试了同样的事情,在同一个项目上关闭并重新打开它,清理它并且内容辅助工作正常之后,然后它崩溃了。

我尝试了什么:

  1. 在“首选项->Java->编辑器->内容辅助->高级”中重置为默认值;
  2. 选中同一菜单中的每个复选框;
  3. 创建一个新工作区并在那里尝试;
  4. 删除 .index 文件和 .metadata/.plugins/org.eclipse.jdt.core 中的“savedIndexNames.txt”;
  5. 检查重复的库。

我没有尝试的是重新安装 Eclipse。我使用的版本是 Eclipse IDE for Java Developers (Juno)。

似乎没有任何效果。

更新:

按照iGili 的建议检查日志。 失败时会引发一些异常:

org.eclipse.e4.core.di.InjectionException: org.eclipse.core.commands.ExecutionException: While executing the action, an exception occurred
Caused by: org.eclipse.core.commands.ExecutionException: While executing the action, an exception occurred
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
    at org.eclipse.jdt.internal.codeassist.InternalCompletionProposal.findConstructorParameterNames(InternalCompletionProposal.java:257)
    at org.eclipse.jdt.internal.codeassist.InternalCompletionProposal.findParameterNames(InternalCompletionProposal.java:1456)
    at org.eclipse.jdt.ui.text.java.CompletionProposalLabelProvider.appendUnboundedParameterList(CompletionProposalLabelProvider.java:113)
    at org.eclipse.jdt.ui.text.java.CompletionProposalLabelProvider.createMethodProposalLabel(CompletionProposalLabelProvider.java:272)
    at org.eclipse.jdt.ui.text.java.CompletionProposalLabelProvider.createStyledLabel(CompletionProposalLabelProvider.java:570)
    at org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal.computeDisplayString(LazyJavaCompletionProposal.java:262)
    at org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal.getStyledDisplayString(LazyJavaCompletionProposal.java:238)
    at org.eclipse.jface.text.contentassist.CompletionProposalPopup.handleSetData(CompletionProposalPopup.java:841)
    at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$24(CompletionProposalPopup.java:831)
    at org.eclipse.jface.text.contentassist.CompletionProposalPopup$3.handleEvent(CompletionProposalPopup.java:593)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
    at org.eclipse.swt.widgets.Table.checkData(Table.java:1166)
    at org.eclipse.swt.widgets.Table.wmNotifyChild(Table.java:6749)
    at org.eclipse.swt.widgets.Control.wmNotify(Control.java:5534)
    at org.eclipse.swt.widgets.Composite.wmNotify(Composite.java:1896)
    at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:5086)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4584)
    at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:341)
    at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1627)
    at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2069)
    at org.eclipse.swt.widgets.Display.windowProc(Display.java:4989)
    at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method)
    at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:2440)
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:564)
    at org.eclipse.swt.widgets.Table.callWindowProc(Table.java:430)
    at org.eclipse.swt.widgets.Control.windowProc(Control.java:4623)

它继续,我不知道发布长堆栈跟踪的约定是什么

【问题讨论】:

  • 当我检查我的 Eclipse 时它工作正常,我使用相同的 Eclipse。仅此示例会发生这种情况还是CTRL + Space 根本不起作用?
  • 在我尝试这个示例之前,Ctrl+Space 几乎可以在任何地方工作,但在它之后根本不起作用。
  • 我不认为 Ctrl+Space 分配给其他任务,因为在这种情况下它根本不起作用。在我的情况下,当我重新启动 Eclipse/重新打开项目/清理项目直到我尝试对给定示例使用自动完成时,它再次工作
  • 我建议重新安装 Eclipse,我认为这是一种快速的方法。让我知道它是否解决了问题

标签: java eclipse content-assist


【解决方案1】:

我也有同样的情况。 Windows -> 首选项 -> Java -> 编辑器 -> 内容辅助 -> 高级。确保在默认内容辅助列表(弹出窗口的第一个面板)中选中“Java 提案”复选框。

点击底部的“Restore Defaults”按钮可以自动检查“Java Proposals”。

【讨论】:

  • 这实际上对我有用,但很奇怪这个选项默认是禁用的!
【解决方案2】:

返回“高级内容辅助”首选项页面并恢复默认值。使用 OK 按钮关闭对话框。

【讨论】:

  • 这正是我多次所做的。没用
【解决方案3】:

我遇到了同样的问题。实际上我弹出了内容辅助,但它小于几个像素。(谁缩小了这个,为什么它缩小了不知道......) 但是,如果您在通常应该出现内容辅助的地方看到一些奇怪的东西(在我的情况下,那是字母“Rp”,但我想它可以是任何东西),请尝试扩展它,您可能会得到它。祝你好运。

【讨论】:

    【解决方案4】:

    这些答案都没有帮助我:Java 提案被勾选,并且恢复默认值没有做任何事情。它只有在我重新启动 Eclipse 后才开始工作。

    【讨论】:

      【解决方案5】:

      Windows -> Preferences -> Java -> Editor -> Content Assist -> Advanced (Java Proposals) 需要选择。

      【讨论】:

        【解决方案6】:

        对我有用的是创建一个新工作区并将所有项目复制到该工作区。这个问题现在只出现在以前的工作区。

        【讨论】:

          【解决方案7】:

          我认为您在 3.6 中遇到了一个已知缺陷。见here

          尝试下载更新的版本 - 自 3.7 起已修复

          [edit]我刚刚意识到你写了“Juno”——你使用的是最新的(4.2.2)吗?

          【讨论】:

          • 我用的是4.2,没找到合理解释后报了这个bug
          • 我正打算这样做
          【解决方案8】:

          我刚刚在 Juno 切换工作区中修复了同样的问题,然后切换回来。其他解决方案无效。

          【讨论】:

            【解决方案9】:

            我遇到了同样的问题,但我的项目中只有一个特定的文件(在其他文件上完成工作正常)。我也在使用 Eclipse Juno。

            我通过删除一些警告来解决问题

            【讨论】:

              【解决方案10】:

              这个复选框“java 提案”将被勾选,直到我失败并得到“没有可用的完成”。之后,下次我打开设置时它会显示为未勾选。

              【讨论】:

                【解决方案11】:

                转到 Eclipse → 首选项 → Java → 编辑器 → 内容辅助 → 恢复默认值

                然后 项目 → 清理

                【讨论】:

                  【解决方案12】:

                  今天早上我无法扩展 sysout。在浪费了几个小时之后,我发现我试图将 System.out.println() 放在一个方法之外。当我在一个方法中做这件事时,一切都很完美。

                  【讨论】:

                    【解决方案13】:

                    我刚才在 Eclipse 版本 2019-06 (4.12) 中遇到了同样的问题。对我来说,清理项目解决了这个问题。

                    【讨论】: