2011-02-09 3 views
2

Я недавно получал эту ошибку компиляции Java каждый раз, когда пытаюсь скомпилировать код, создающий экземпляр класса, который я создал. Я пробовал компилировать вручную, компилировать из другого места и даже пытаться скомпилировать в безопасном режиме. Я также полностью переустановил Java на свой компьютер. Вот пример кода, я пишу и ошибок я всегда получаю:
Instance создатель класса: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, он работает так, как должен.

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

EDIT: Раньше я имел возможность компилировать классы, подобные этому, только недавно я начал получать эту ошибку. Я компилирую с помощью внешнего инструмента, который я создал в 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 
+0

ли оба класса в одном файле?, Я имею в виду Может класс, объявленный внутри класса Ничего?, Если нет, то вы должны импортировать его –

+1

@Chuck, два общественных классов не может существовать в том же файле (и если бы они были, он бы получил ошибку для этого), так что этого не может быть. –

+0

@Chuck Birkin: Оба класса являются публичными. Если бы они были в том же файле, они бы не компилировались, но ошибка была бы «class Can is public», должна быть объявлена ​​в файле Can.java public class Can {«или что-то подобное. – GreenMatt

ответ

1

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

javac Nothing.java 

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

+0

Вау, я не ожидал, что так много ответов так быстро, спасибо! Вот еще несколько деталей обо всем: Раньше я имел возможность компилировать классы, подобные этому, только недавно я начал получать эту ошибку. Я компилирую с помощью внешнего инструмента, который я создал в Eclipse IDE, но я также попытался скомпилировать его, просто перейдя в каталог, в котором находятся два файла в окне CMD, и используется javac Nothing.java , но та же ошибка возникает. Я также попытался сначала скомпилировать Can.java (который компилирует), а затем Nothing.java, но это терпит неудачу. –

+2

@Alex Ozer: Пожалуйста, отредактируйте вопрос, чтобы добавить в него дополнительные данные, чтобы кто-то, впервые прочитавший вопрос, увидит их там. Не все читают комментарии к ответам. Что касается того, что происходит, возможно ли, что вы каким-то образом получили anunprintable символ в одном из файлов (возможно, Nothing.java)? Попробуйте перепечатать вещи (боль, я знаю) и перекомпилировать. Я бы начал с строки 'Can World = new Can();'. – GreenMatt

2

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

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

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

package com.yourdomain.example; 

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

import com.yourdomain.example.Can; 

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

javac com/yourdomain/example/*.java 

И вы могли бы запустить эту программу с помощью:

java com.yourdomain.example.Nothing 

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

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

+4

Импорт не требуется для классов внутри пакета. – Nowaker

+1

@ Damian, начав работать на Java, достаточно запутанно, как есть ... это не стоит добавлять к нему. Невозможно повредить заявление об импорте, и было бы необходимо, если бы он поместил их в отдельные пакеты. –

+0

Вы правы. +1 для этого тогда. – Nowaker

0

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

Спасибо за помощь от всех, хотя :)

Смежные вопросы