Java не будет компилировать объекты, созданные мной - PullRequest
2 голосов
/ 10 февраля 2011

Я недавно получаю эту ошибку компиляции Java каждый раз, когда пытаюсь скомпилировать код, который создает экземпляр класса, который я создал. Я пытался компилировать вручную, компилировать из другого места, и даже пытался компилировать в безопасном режиме. Я также полностью переустановил Java на моем компьютере. Вот пример кода, который я пишу, и ошибка, которую я всегда получаю:
Класс создателя экземпляра:

public class Nothing {
    public static void main(String args[]) {
        Can World = new Can();
    }
}

Класс:

public class Can {
    public Can() {
        System.out.println("Test");
    }
}

Ошибка компиляции:

Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
        ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
        Can World = new Can();
                        ^
2 errors

Кто-то, кто знает Java лучше меня, пытался скомпилировать файлы, с которыми у меня возникли проблемы, но безуспешно. Кроме того, когда я запускаю код из Eclipse, моей IDE, он работает так, как должен.

Любые предложения или решения будут очень, очень ценны. Я бы очень не хотел, чтобы что-то подобное мешало мне программировать. Еще раз спасибо.

РЕДАКТИРОВАТЬ: Раньше я мог компилировать классы, как это, пока только недавно я начал получать эту ошибку. Я компилирую, используя внешний инструмент, который я создал в Eclipse IDE, но я также попытался скомпилировать, просто перейдя в каталог, в котором находятся два файла в окне CMD, и использовал javac Nothing.java, но возникает та же ошибка. Я также попытался сначала скомпилировать Can.java (который компилируется), а затем Nothing.java, но это также не удалось. Вот текст, который я получаю при компиляции из окна CMD:

02/09/2011  06:44 PM    <DIR>          .
02/09/2011  06:44 PM    <DIR>          ..
02/09/2011  03:45 PM               289 .classpath
02/09/2011  03:45 PM               382 .project
02/09/2011  03:45 PM    <DIR>          .settings
02/09/2011  06:00 PM                75 Can.java
02/09/2011  05:49 PM               102 Nothing.java
               4 File(s)            848 bytes
               3 Dir(s)  64,669,216,768 bytes free

C:\Users\Alex\Mindstorms\NXT\leJOS NXJ\Moment>javac Nothing.java
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
                Can World = new Can();
                ^
Nothing.java:4: cannot find symbol
symbol  : class Can
location: class Nothing
                Can World = new Can();
                                ^
2 errors

Ответы [ 3 ]

2 голосов
/ 10 февраля 2011

Проблема в том, что вам нужно иметь соответствующий оператор импорта (если он находится в отдельных пакетах), и вам нужно запустить компилятор Java из соответствующего каталога. Предположим, что ваша структура каталогов выглядит следующим образом:

src/
   com/
      yourdomain/
         example/
            Can.java
            Nothing.java

Тогда вам понадобится следующее в верхней части обоих ваших * .java файлов:

package com.yourdomain.example;

И вы должны поместить следующую инструкцию import в Nothing.java (технически это необязательно, когда они находятся в одном и том же пакете, но необходимо, когда они в разных пакетах, и это хорошая привычка):

import com.yourdomain.example.Can;

И затем вы вызываете компилятор из каталога src следующим образом:

 javac com/yourdomain/example/*.java

И затем вы можете запустить эту программу, используя:

 java com.yourdomain.example.Nothing

Кстати, вы действительно не должны создавать проекты вручную; вам следует использовать систему автоматической сборки, такую ​​как Maven или Ant . Если вы создаете свой проект с помощью IDE NetBeans , кроме предоставления вам простых кнопок «Построить», «Выполнить» и «Построить и запустить», а также всевозможных приятных функций IDE (подсветка кода, инкрементная компиляция и предложения по исправлению), он сгенерирует проект сборки Ant для вас.

Редактировать
Исходя из вашего обновленного вопроса, ... обратите внимание, что компилятор Eclipse отличается от javac. Если вы установили javac с помощью Cygwin или если вы делитесь своими файлами между Windows и UNIX (возможно, через систему контроля версий), возможно, вы столкнулись с проблемой кодировки. Я бы предложил сохранить эти файлы в UTF-8 и запустить unix2dos (или наоборот, если вы установили javac через Cygwin) и перекомпилировать. Если это не сработает, возможно, стоит переустановить javac. В противном случае всегда есть Ubuntu;).

1 голос
/ 10 февраля 2011

Поместив код, представленный для каждого класса, в отдельные файлы (конечно, с именами Can.java и Nothing.java) и поместив оба файла в один каталог, они компилируются для меня с помощью компилятора командной строки:

javac Nothing.java

Ошибка указывает, что компилятор не может найти класс Can при компиляции Nothing. У вас есть оба файла в одном каталоге?

0 голосов
/ 11 февраля 2011

Я понял это.Как выяснилось, я попытался установить на своем компьютере более старую версию Lego Robotics с Java, и я создал несколько переменных окружения для этого.Одним из них была переменная CLASSPATH.Я довольно уверен, что Java пыталась прочитать эту переменную (которую я больше не использовал), чтобы искать мои классы.Как только я удалил его (и другие старые переменные, которые я не использовал), перезапустил мой компьютер и переустановил JDK, все работает.

Спасибо всем за помощь:)

...