Ошибка "Не удается найти символ" - даже на нелепо простом примере
Так что я пытался решить эту проблему в течение нескольких часов. Я искал в Интернете, я искал Stackru, я спросил некоторых сотрудников (я стажер), и, честно говоря, никто не может сказать мне, что происходит! Я собрал действительно очень простой пример, чтобы показать вам, что я делаю (и я получаю ошибку даже с простым примером)
У меня два .java
файлы. Один Test.java
другой testClass.java
,
//testClass.java
package test;
public class testClass {
private int someMember=0;
public testClass(){
//kill me now
}
}
Тогда у меня есть файл Test.java, который содержит мой основной метод. (хотя в моей реальной проблеме у меня нет основного метода - это сервлет с doGet()
метод)
//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();
Можете ли вы помочь брату?:(
3 ответа
Ваши классы находятся в пакете, и Java будет искать классы, предполагая, что структура пакета - но javac не будет строить эту структуру для вас, пока вы не скажете это; он обычно помещает файл класса рядом с файлом Java.
Опции:
- Поместите исходные файлы в
test
каталог и компилироватьtest\Test.java
а такжеtest\testClass.java
- Уточнить
-d .
когда вы компилируете, чтобы заставить javac создать структуру пакета.
Использование IDE (Eclipse, IntelliJ и т. Д.) Имеет тенденцию поощрять или даже заставлять вас помещать файлы в правильный каталог и, как правило, также упрощает сборку кода.
Я сделал именно то, что ты сделал
$ 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/
реж, как сказал Джон Скит. Может быть, это то, что отличается.
Самое простое решение: создать каталог test
и поместите свой .java
там, добавьте папку, которая содержит ваш test
папка в путь к классам. Если вы не знаете, как это сделать, просто поместите test
-папка в подпапке вашей java-папки lib
(например, c:\prog\javasdk\lib). Просто скомпилируйте с javac Test.java
(testClass скомпилируется автоматически), запустите его с java test.Test
откуда угодно.