Ошибка «Не удается найти символ» - даже на нелепо простом примере - PullRequest
4 голосов
/ 21 июля 2011

Итак, я пытался решить эту проблему в течение нескольких часов. Я искал в Интернете, я искал StackOverflow, я спросил некоторых сотрудников (я стажер), и, честно говоря, никто не может сказать мне, что происходит! Я собрал действительно очень простой пример, чтобы показать вам, что я делаю (и я получаю ошибку даже с простым примером)

У меня есть два .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 ]

14 голосов
/ 21 июля 2011

Ваши классы находятся в пакете, и Java будет искать классы, предполагая, что структура пакета - но javac не будет строить эту структуру для вас, пока вы не скажете это;он обычно помещает файл класса вместе с файлом Java.

Опции:

  • Поместите исходные файлы в каталог test и скомпилируйте test\Test.java и test\testClass.java
  • Укажите -d . при компиляции, чтобы заставить javac создать структуру пакета.

Использование IDE (Eclipse, IntelliJ и т. Д.), Как правило, поощряет или даже заставляет вас помещать файлыв правильном каталоге и, как правило, упрощает сборку кода.

0 голосов
/ 21 июля 2011

Самое простое решение: создайте каталог test и поместите туда свои .java, добавьте папку, в которой содержится ваша test -каталог, в путь к классам.Если вы не знаете, как это сделать, просто поместите папку test в подпапку вашей папки java lib (например, c: \ prog \ javasdk \ lib).Просто скомпилируйте с javac Test.java (testClass скомпилирует автоматически), запустите его с java test.Test из любого места.

0 голосов
/ 21 июля 2011

Я сделал именно то, что вы сделали

$ 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/ dir, как сказал Джон Скит. Может быть, это то, что отличается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...