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

Posted

技术标签:

【中文标题】Java 搜索中的类文件名必须以 .class 异常结尾【英文标题】:Class file name must end with .class exception in Java Search 【发布时间】:2010-09-05 15:06:09 【问题描述】:

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

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

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

我在谷歌上找到的唯一参考是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? 【参考方案1】:

关闭项目对我没有用。我使用 -clean 标志启动了 eclipse,但出于某种原因,它起作用了。

【讨论】:

clean 选项说明:“如果设置为“true”,OSGi 框架和 eclipse 运行时使用的任何缓存数据都将被清除干净。这将清除用于存储包依赖解析和 eclipse 扩展的缓存注册表数据。使用此选项将强制 eclipse 重新初始化这些缓存。"【参考方案2】:

只是

关闭项目 手动清除输出文件夹 打开项目

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

【讨论】:

【参考方案3】:

我最近也遇到了这个问题,下面的场景对我有用。

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

【讨论】:

【参考方案4】:

评论 #9 to bug 269820 解释了如何删除搜索索引,这似乎是解决索引损坏的方法,其症状是可怕的

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

消息框。

如何删除搜索索引:

    关闭 Eclipse 删除/.metadata/.plugins/org.eclipse.jdt.core/*.index 删除/.metadata/.plugins/org.eclipse.jdt.core/savedIndexNames.txt 再次启动 Eclipse

【讨论】:

小错字。 2.删除.metadata.plugins\org.eclipse.jdt.core*.index 这对我也有用。在这里找到它:u.nu/3aqy3 但这是相同的程序。 〜克里斯【参考方案5】:

前几天收到此错误。尝试手动从我的输出文件夹中删除所有 .class 文件和资源。没用。重新启动我的计算机(WinXP)。没用。在 Eclipse 中关闭我的项目并再次打开它。 工作!!!希望这能解决某人的问题。搜索工具,对 Eclipse 来说确实必不可少。

【讨论】:

【参考方案6】:

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

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

如果做不到这一点,bugs.eclipse.org 可能会提供答案。

如果工作区缓存了损坏的内容,您可以通过在 workspace/.metadata/.plugins 中四处寻找来将其删除。大部分内容都是相当短暂的(尽管备份并注意已删除的首选项)。

【讨论】:

关闭和打开也对我有用。以前我尝试过 Project |清洁...在整个工作区,但这并没有解决问题。我想知道除了清理该项目之外,关闭和打开项目还做了什么。 关闭和重新打开我的项目对我没有帮助 :-( 似乎关闭和重新打开对某些人有帮助,但如果没有,您需要遵循 Olivier Dagenais 的建议

以上是关于Java 搜索中的类文件名必须以 .class 异常结尾的主要内容,如果未能解决你的问题,请参考以下文章

Java入门——面向对象基础

关于类的知识

JVM加载class文件的原理机制

Load Class File Operational Principle

java中的jar包有啥用

Java的包机制