如何找到“已在未命名的包中定义”的Java类?

时间:2013-05-06 19:54:04

标签: java compiler-errors packages

我正在尝试将FlowLayout()用户界面转换为GridBagLayout()用户界面。经过一些修改和测试后,我开始收到编译器错误:

*classname* is already defined in unnamed package

我决定回滚到FlowLayout()版本 - 我的上一个工作版本。该版本编译得很好,但是当我运行时(从命令行),我的混乱显示GridBagLayout()

我尝试重命名.java文件,但是我收到了上面提到的编译器错误。我重新启动了我的控制台窗口和记事本,以防某些东西卡在内存中。这没有解决问题。

但是,我确实将FlowLayout()版本带到了我尚未编译GridBagLayout()更改的笔记本电脑上。在那台机器上,它运行得很好,给了我期待的FlowLayout()

我已经扫描了我的/ java目录中的* .class,删除了我找到的所有类,但我仍然收到错误。如果它有所作为,我正在运行Win7。记事本是我的“IDE”,我在命令提示符下运行所有​​内容。

我需要寻找什么才能刷新这个“未命名的软件包”?

2 个答案:

答案 0 :(得分:2)

所有文件都没有前导package语句。无论如何,正如Java docs所述:

  

一般来说,一个未命名的包只适用于小型或临时应用程序,或者刚刚开始开发过程。否则,类和接口属于命名包。

答案 1 :(得分:1)

请参阅@esseks发布的链接以了解Java包。我发帖只是为了帮助您使用findstr快速找到任何重复的类定义(Windows等效于grep

C:\> CD C:\path\to\java

// delete all .class files
C:\path\to\java>del /S *.class

// find all .java files with FlowLayout class definition
C:\path\to\java>findstr /S /I /N /C:"class flowlayout" *.java

// find all .java files with GridBagLayout class definition
C:\path\to\java>findstr /S /I /N /C:"class gridbaglayout" *.java

图例:

  • / S =递归子目录
  • / I =不区分大小写的匹配
  • / N =打印行号
  • / C =要在文件中找到的字符串