Java搜索中类文件名必须以.class异常结尾


67

我希望有人可以帮助我解决特定项目中在Eclipse中使用Java搜索功能的问题。

在一个特定项目上使用Java搜索时,出现一条错误消息Class file name must end with .class(请参见下面的堆栈跟踪)。似乎并非所有项目都在发生这种情况,只是一个特定项目在发生,所以也许我应该尝试重新构建某些内容?

我已经尝试过Project -> Clean...并关闭Eclipse,删除所有构建的类文件,然后重新启动Eclipse无济于事。

我可以在Google上找到有关该问题的唯一参考,网址http://www.crazysquirrel.com/computing/java/eclipse/error-during-java-search.jspx,但很遗憾,他的解决方案是删除班级文件,然后重新启动)对我不起作用。

如果有人可以建议您尝试一下,或者我可以收集更多信息来帮助您解决问题,我将非常感谢您提供的建议。

Version: 3.4.0
Build id: I20080617-2000

也刚刚发现了这个线程-http: //www.myeclipseide.com/PNphpBB2-viewtopic-t-20067.html-这表明当项目名称包含句点时,可能会出现相同的问题。不幸的是,在我的设置中情况并非如此,因此我仍然陷入困境。

Caused by: java.lang.IllegalArgumentException: Class file name must end with .class
at org.eclipse.jdt.internal.core.PackageFragment.getClassFile(PackageFragment.java:182)
at org.eclipse.jdt.internal.core.util.HandleFactory.createOpenable(HandleFactory.java:109)
at org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1177)
at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches(JavaSearchParticipant.java:94)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:223)
at org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:506)
at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:551)
at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.internalSearch(RefactoringSearchEngine.java:142)
at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.search(RefactoringSearchEngine.java:129)
at org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeProcessor.initializeReferences(RenameTypeProcessor.java:594)
at org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeProcessor.doCheckFinalConditions(RenameTypeProcessor.java:522)
at org.eclipse.jdt.internal.corext.refactoring.rename.JavaRenameProcessor.checkFinalConditions(JavaRenameProcessor.java:45)
at org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java:225)
at org.eclipse.ltk.core.refactoring.Refactoring.checkAllConditions(Refactoring.java:160)
at org.eclipse.jdt.internal.ui.refactoring.RefactoringExecutionHelper$Operation.run(RefactoringExecutionHelper.java:77)
at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39)
at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:709)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1800)
at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4650)
at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:92)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)

感谢McDowell,关闭和打开项目似乎已经修复了它(至少现在是这样)。


也许类路径有问题?您的项目是否引用了其他任何项目,或者是否有您依赖的外部类或jar?
Sam Merrell

Answers:


62

用于修复Eclipse某些特性的另外两种通用机制:

  • 关闭并打开项目
  • 删除项目(但不要从磁盘!),然后将其重新导入为现有项目

失败的话,bugs.eclipse.org可能会提供答案。

如果工作区正在缓存某些损坏的内容,则可以通过在workspace / .metadata / .plugins中浏览来删除它。大多数东西都是相当短暂的(尽管备份并注意删除的首选项)。


关闭和打开对我也起作用。以前我尝试过Project | 清洁...在整个工作区上,但这并不能解决问题。我想知道关闭和打开的项目除了清理该项目外还做什么。
ZsoltTörök,2010年

1
关闭并重新打开项目对我没有帮助:-(似乎关闭并重新打开对某些人有帮助,但是,如果没有成功,则需要遵循Olivier Dagenais的建议
Roel Spilker 2010年

72

错误269820的注释#9说明了如何删除搜索索引,这似乎是解决症状严重的损坏索引的解决方案

在“项目过滤”期间发生内部错误。
类文件名必须以.class结尾

消息框。

如何删除搜索索引:

  1. 关闭Eclipse
  2. 删除<workspace> /。metadata / .plugins / org.eclipse.jdt.core / *。index
  3. 删除<workspace> /。metadata / .plugins / org.eclipse.jdt.core / savedIndexNames.txt
  4. 再次启动Eclipse

小错字。2.删除<workspace> .metadata.plugins \ org.eclipse.jdt.core * .index
Jon Strayer

这也对我有用。在这里找到它:u.nu/3aqy3但这是相同的过程。〜克里斯
cimnine

7

到了第二天,这个错误。尝试从我的输出文件夹中手动删除所有.class文件和资源。没用 重新启动我的计算机(WinXP)。没用 在Eclipse中关闭我的项目,然后再次打开它。工作了!希望这可以解决某人的问题。搜索功能对Eclipse确实至关重要。


5

我最近也遇到了这个问题,以下情况对我有用。

  1. 关闭Eclipse
  2. 删除 <workspace>/.metadata/.plugins/org.eclipse.jdt.core/*.index
  3. 删除 <workspace>/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt
  4. 再次启动Eclipse

3

关闭项目并不能解决我的问题。我从-clean标志开始蚀,由于某种原因,它起作用了。


clean选项说明:“如果设置为” true“,则OSGi框架和eclipse运行时使用的所有缓存数据都将被清除。这将清除用于存储包依赖关系解析和eclipse扩展注册表数据的缓存。使用此选项将强制执行蚀重新初始化这些缓存。”
维吾尔族Güneri

2

只是

  • 结束专案
  • 清除手动输出的文件夹
  • 公开项目

(Eclipse 3.5 SR2,内部版本ID:20100218-1602)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.