【发布时间】:2011-08-25 06:41:18
【问题描述】:
我没有设置 %CLASSPATH%。据我了解,这应该不是问题,因为 Javac 将假定当前目录的类路径。
正如您在下面看到的,javac 无法找到我的 Case 类,即使它位于同一个目录中。关于为什么会发生这种情况的任何想法?当我使用 Eclipse 时,这段代码可以正常工作。
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>dir /B
Case.class
Case.java
EntryPoint.java
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>javac EntryPoint.java
EntryPoint.java:16: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
ArrayList<Case> cases = new ArrayList<Case>();
^
EntryPoint.java:16: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
ArrayList<Case> cases = new ArrayList<Case>();
^
EntryPoint.java:24: cannot find symbol
symbol : class Case
location: class codejam2011.Round0.D.EntryPoint
cases.add(new Case(new Integer(count), line));
^
3 errors
C:\Documents and Settings\joep\My Documents\GCJ\src\codejam2011\Round0\D>
更新 1:
尝试从我的包根目录 (src) 编译后,我收到一个新错误(即使在删除 Case.class 文件之后)
C:\Documents and Settings\joep\My Documents\GCJ\src>javac -cp . codejam2011/Round0/D/EntryPoint.java
codejam2011\Round0\D\EntryPoint.java:16: cannot access codejam2011.Round0.D.Case
bad class file: .\codejam2011\Round0\D\Case.java
file does not contain class codejam2011.Round0.D.Case
Please remove or make sure it appears in the correct subdirectory of the classpath.
ArrayList<Case> cases = new ArrayList<Case>();
^
1 error
C:\Documents and Settings\joep\My Documents\GCJ\src>
更新 2: 它似乎是从另一个包中获取 Case.java 文件。
C:\Documents and Settings\joep\My Documents\GCJ\src>javac -d ../classes codejam2011\Round0\D\*.java
.\codejam2011\Round0\D\Case.java:4: duplicate class: codejam2011.Round0.C.Case
public class Case
^
codejam2011\Round0\D\EntryPoint.java:16: cannot access codejam2011.Round0.D.Case
bad class file: .\codejam2011\Round0\D\Case.java
file does not contain class codejam2011.Round0.D.Case
Please remove or make sure it appears in the correct subdirectory of the classpath.
ArrayList<Case> cases = new ArrayList<Case>();
^
2 errors
C:\Documents and Settings\joep\My Documents\GCJ\src>
【问题讨论】:
-
您是否在 EntryPoint 中导入了类 Case?
-
@Danish:没必要,因为它在同一个包中。
-
你研究过错误信息吗?
duplicate class: codejam2011.Round0.C.Case有 C 和 D - 模棱两可。您必须排除一些导入,或者明确指定您的意思是哪个 Case、codejam2011.Round0.C.Case 或 codejam2011.Round0.D.Case。 -
@user 虽然它们在不同的包中。为什么编译器会感到困惑并尝试使用不同包中的一个?
-
我没有您的源目录、目标目录、当前目录、环境变量和您的操作历史的概述。您应该开始删除所有旧课程。
标签: java compiler-errors packages javac