2011-02-09 6 views
2

작성한 클래스의 인스턴스를 작성하는 코드를 컴파일 할 때마다 최근에이 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가 실행되어야합니다.

모든 제안이나 해결책은 정말 감사하겠습니다. 나는 프로그래밍에서 나를 방해하는 이런 일이 정말로 싫어 할 것입니다. 다시 한번 감사드립니다.

편집 : 최근에야이 오류를 받기 전까지는이 클래스를 컴파일 할 수있었습니다. 이클립스 IDE에서 만든 외부 도구를 사용하여 컴파일 중이지만 두 파일이 CMD 창에 있고 javac Nothing.java를 사용하는 디렉터리로 이동하여 컴파일하는 것도 시도했지만 동일한 오류가 발생합니다. 나는 또한 Can.java 컴파일 (컴파일)을 시도한 다음 Nothing.java 컴파일을 시도했지만 실패했다. (물론, Can.java 및 Nothing.java 이름) 별도의 파일로 각 클래스에 제시 한 코드를 넣고 가짐으로써

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, 두 개의 public 클래스를 가져와야합니다 같은 파일에 존재할 수 없습니다 (그렇다면 오류가 발생합니다). 그렇게해서는 안됩니다. –

+0

@Chuck Birkin : 두 클래스 모두 공개입니다. 그들이 컴파일하지 않는 동일한 파일에 있었지만 오류가 "Can Can public"이라면 Can.java라는 파일에 선언해야합니다 public class Can { "또는 이와 유사한 것입니다. – GreenMatt

답변

1

: 여기 CMD 창에서 컴파일 할 때 내가 할 텍스트입니다 그들이 나 명령 줄 컴파일러를 사용하기위한 컴파일 같은 디렉토리에 두 파일 :

javac Nothing.java 

오류는 아무것도를 컴파일하지 않을 때 컴파일러는 캔 클래스를 찾을 수 없음을 나타냅니다. 두 파일이 같은 디렉토리에 있습니까?

+0

와우, 나는 그 많은 대답을 그렇게 빨리 얻을 것을 기대하지 않았다, 고마워! 다음은 모든 것에 대한 몇 가지 세부 정보입니다. 최근에야이 오류를 받기 전까지는이 클래스를 컴파일 할 수있었습니다. 이클립스 IDE에서 만든 외부 도구를 사용하여 컴파일 중이지만 두 파일이 CMD 창에 있고 사용 된 디렉토리로 이동하여 컴파일하려고 시도했습니다. javac Nothing.java 아직 동일한 오류가 발생합니다. 나는 또한 Can.java 컴파일 (컴파일)을 시도한 다음 Nothing을 시도했다.자바,하지만 이것은뿐만 아니라 실패합니다. –

+2

@Alex Ozer : 추가 세부 정보를 입력하여 질문을 읽는 사람이 먼저 질문을 읽을 수 있도록 질문을 편집하십시오. 모든 사람이 답변에 대한 의견을 읽지 않습니다. 무슨 일이 일어나고 있는지에 관해서는, 당신은 어떻게 든 파일 중 하나 (아마도 Nothing.java)에 인쇄 할 수없는 문자가있을 가능성이 있습니까? 다시 입력하는 것을 시도해보십시오 (아는 것은 아쉽습니다). 다시 컴파일하십시오. 'Can World = new Can();'줄부터 시작하겠다. – GreenMatt

2

적절한 가져 오기 문 (별도의 패키지 인 경우)이 필요하며 적절한 디렉토리에서 Java 컴파일러를 실행해야하는 경우가 있습니다.

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

그런 다음 당신은 모두 당신의 *의 된 .java 파일의 상단에 다음과 같은 필요 :

package com.yourdomain.example; 

을 그리고 당신은 아무것도에 다음 import 문을 넣어야 디렉토리 구조를 치죠하는 것 같습니다.자바 (기술적으로 이것은 그들이 모두 동일한 패키지에있을 때 필요하지 않지만 경우 별도의 패키지로 필요하며, 그것은 좋은 습관) :

import com.yourdomain.example.Can; 

그리고 당신이 src 디렉토리 내에서 컴파일러를 호출 할 것이다

javac com/yourdomain/example/*.java 

을 그리고 당신은 다음 사용하여이 프로그램을 실행할 수 있습니다 : 다음과 같이

java com.yourdomain.example.Nothing 

그건 그렇고, 당신은 정말 손이 w로 프로젝트를 구축 할 수 shoudn't 찬성; Maven 또는 Ant과 같은 자동 빌드 시스템을 사용해야합니다. "Build", "Run"및 "Build & Run"버튼과 모든 종류의 멋진 IDE 기능 (코드 강조 표시, 증분 컴파일 및 수정 제안)을 제공하는 것 이외에 NetBeans IDE을 사용하여 프로젝트를 만들면 Ant 빌드 프로젝트를 생성합니다.

편집
업데이트 된 질문을 바탕으로 ... 이클립스의 컴파일러는 javac 구별된다 있습니다. Cygwin을 사용하여 javac를 설치했거나 Windows와 UNIX간에 버전 관리 시스템을 통해 파일을 공유 한 경우 인코딩 문제가 발생할 수 있습니다. UTF-8로 파일을 다시 저장하고 unix2dos를 실행하거나 Cygwin을 통해 javac를 설치 한 경우 그 파일을 다시 컴파일하고 다시 컴파일하는 것이 좋습니다. 그래도 작동하지 않는다면 javac를 다시 설치해도 좋습니다. 그것이 실패하면 우분투가 항상 있습니다.).

+4

패키지 내의 클래스에는 가져 오기가 필요 없습니다. 그대로 – Nowaker

+1

@Damian는 자바로 시작하는 ... 충분히 혼란이 여기에 추가 가치가 없어. 그것은 import 문을 해치지 않을 수 있으며, 자신이 별도의 패키지에 넣어 경우는 필요하다. –

+0

당신이 옳습니다. 그때 +1. – Nowaker

0

나는 그것을 알아 냈다. 결국 컴퓨터에서 Java로 Lego Robotics의 구버전을 설정하려고 시도했지만, 그와 함께 갈 환경 변수를 만들었습니다. 그 중 하나는 CLASSPATH 변수입니다. Java가 클래스를 찾기 위해 (더 이상 사용하지 않는) 변수를 읽으 려하고 있다고 확신합니다. 일단 내가 그것을 (그리고 내가 사용하지 않는 다른 오래된 변수) 삭제, 내 컴퓨터를 다시 시작하고 JDK를 다시 설치, 모든 작동합니다. 하지만 모든 사람의 도움 :

관련 문제