2017-05-14 6 views
-2
package pkg1; 
    public class demoFile1 { 

      private int maze = 5; 
      public demoFile1() {} 
      public demoFile1 (int maze) { 

        this.maze = maze; 
        System.out.println(this.maze); 

      } 
    } 

package pkg2; 
import pkg1.*; 
    public class demoFile2 { 
      public static void main (String[] args) { 

        demoFile1 obj = new demoFile1 (10); 

      } 
    } 

여기서 두 패키지 pkg1pkg2을 생성했습니다.사용자 정의 패키지에서 클래스를 가져올 수 없습니다

: pkg1에서 클래스와 이전의 클래스를 initailize하는 pkg1를 가져 pkg2 안에 다른 클래스 따라서는이 하위 디렉토리 내에서 호출하려고 할 때 pkg1에서 .class, 이것은 오류가 발생 가져올 필요가있다

error: package pkg1 does not exist

는 두 가지 패키지가 같은 수준에 있었다하지 않을 경우 프로그램이, (pkg2에서 구속하지 않고, 다른 수준)을 pkg1.demoFile1.class 파일이 그 하위 디렉토리 외부에서 demoFile2.class 수입 할 때 잘 작동하지만 있습니다 각 소스 코드 파일 및 .class fil ES 즉, pkg2.demoFile2.class 가져 오기 할 때 pkg1.demoFile1.class

편집 # 1 : 폴더 구조 : click here

내가 느끼는 것은 만들거나에서 .class 파일을 가져 오는 동안 계층 주문/우선 몇 가지 문제가되었을 수도 있다는 것입니다 패키지 또는 전체 정의가 잘못 작성되었을 수 있습니다. 도와주세요.

+0

뭘 할 때 오류가 발생합니까? 가능한 한 정확하게하십시오. 그리고 폴더/파일 구조를 게시하십시오. –

+0

무슨 소리 야? 위의 코드를 테스트 한 결과 성공적으로 컴파일되고 실행되었습니다. –

+0

'src/pkg2'에서 프로그램을 컴파일하려고 할 때 OP에서 오류가 발생한다고 생각합니다. 그렇다면'src'에서 컴파일하거나'..'을 소스 경로로 지정하십시오. – Turing85

답변

0

대부분 classpath 문제가 있습니다. 클래스 파일은 java 패키지 선언과 일치하는 폴더 안에 있어야합니다. 폴더 구조의 루트는 클래스 경로에있는 각 폴더/jar에서 시작할 수 있습니다 (편집 : 폴더 구조가 정확함).

을 실행하면 (현재 디렉토리라고합니다 ".")는 "현재 디렉토리"클래스 경로를 사용 기본적으로

java pkg2.demoFile2 

. 따라서 demoFile2.class는 pkg2 폴더 안에 있고 demoFile1.class는 pkg2.class 폴더 안에 있어야하며 패키지 폴더을 모두 포함하는 폴더에서 java 프로그램을 실행해야합니다.

이 폴더 구조는 일반적으로 Java 편집기에서 처리합니다. 그래서 당신이 명령 줄에서 "javac"를 실행하고 있다고 가정합니다. 거기에 필요한 폴더 구조를 만들 수 있도록이 경우 출력 폴더를 지정

다시
javac -d . file1.java file2.java 

당신은 당신이 이전에 컴파일 된 클래스를 찾을 수있는 곳 javac의 말할 필요 한 번에 하나 개의 파일을 컴파일하려면, 클래스 경로를 사용 (다시 루트 폴더에서 이것을 실행) :

javac -d . -cp . file2.java 

당신은 어떤 폴더에서이 모든 작업을 수행 할 수 있습니다 (절대 또는 상대 경로로) 제대로 클래스 경로를 specifiying합니다. 루트 폴더에서 모든 명령을 실행하는 것이 가장 간단한 방법입니다.

자바에서는 클래스 로딩이나 지금 당장 생각할 수있는 다른 상황에서 순서/우선 순위 문제가 없습니다.