所以我一直试图在几个小时内解决这个问题。我已经浏览了互联网,我已经搜索了StackOverflow,我问过一些同事(我是实习生)老实说,没有人能告诉我发生了什么!我把一个非常简单的例子放在一起向你展示我在做什么(即使用简单的例子我也得到了错误)
我有两个.java
个文件。一个是Test.java
,另一个是testClass.java
。
//testClass.java
package test;
public class testClass {
private int someMember=0;
public testClass(){
//kill me now
}
}
然后我有我的Test.java文件,其中包含我的main方法。 (虽然在我真正的问题中我没有主方法 - 它是一个带有doGet()
方法的servlet)
//Test.java
package test;
public class Test {
public static void main(String[] args) {
testClass myTest = new testClass();
}
}
我正在使用以下内容进行编译(从Windows命令行,使用当前目录保存我的.java文件):
..java bin location..\javac testClass.java
这非常正常,我在当前目录中获得了一个testClass.class文件。然后,我尝试使用以下内容编译Test.java文件(再次在工作目录中):
..java bin location..\javac -classpath . Test.java
这会导致以下错误:
Test.java:6: cannot find symbol
symbol : class testClass
location : class test.testClass
testClass myTest = new testClass();
你能帮兄弟出去吗? :(
答案 0 :(得分:14)
你的类在一个包中,Java将寻找假定包结构的类 - 但javac不会构建那个结构,除非你告诉它;它通常会将类文件放在Java文件旁边。
选项:
test
目录中,然后编译test\Test.java
和test\testClass.java
-d .
,以强制javac构建包结构。使用IDE(Eclipse,IntelliJ等)往往会鼓励甚至强迫您将文件放在正确的目录中,并且通常也可以使构建代码更容易。
答案 1 :(得分:0)
我完成了你的所作所为
$ ls -la test/
drwxr-xr-x 6 amirraminfar staff 204 Jul 21 10:24 .
drwxr-xr-x 3 amirraminfar staff 102 Jul 21 10:23 ..
-rw-r--r-- 1 amirraminfar staff 148 Jul 21 10:24 Test.java
-rw-r--r-- 1 amirraminfar staff 140 Jul 21 10:24 testClass.java
然后编译
$ javac test/*
然后跑了。这一切都奏效了。所以这告诉我问题是你编译的方式。您是否尝试过同时编写这两个类?
$ java test.Test
编辑 - 我确实把所有文件放在test/
目录中,就像Jon Skeet所说的那样。也许这就是不同的东西。
答案 2 :(得分:0)
最简单的修复:创建目录test
并将.java
放入其中,将包含您的test
- 文件夹添加到类路径中。如果您不知道该怎么做,只需将您的test
- 文件夹放在java文件夹的子文件夹lib
中(例如c:\ prog \ javasdk \ lib)。只需使用javac Test.java
进行编译(testClass将自动编译),从任何地方使用java test.Test
运行它。