>

Java requires no correlation between package names and source code file structure. But most IDE's require sub-folder for each part of the package name.

위의 진술이 사실입니까?

이것을 시도하기 위해 ~/Temp 에서 간단한 클래스를 작성했습니다.  폴더.

package com.gnrcs.lab;
public class Main {
    public static void main (String... args) {
        System.out.println("Homo Sapiens");
    }
}

그런 다음 명령 줄에서

~$ cd ~/Temp/
~$ javac Main.java // it does produce a Main.class file in ~/Temp
~$ java Main
Error: Could not find or load main class Main
~$ java com.gnrcs.lab.Main
Error: Could not find or load main class com.gnrcs.lab.Main
~$ java -cp . com.gnrcs.lab.Main
Error: Could not find or load main class com.gnrcs.lab.Main

내가 뭘 잘못 했니? 도움을 주시면 감사하겠습니다. 감사!


  • 답변 # 1

    패키지를 사용한 결과는 클래스 또는 인터페이스의 바이트 코드가 패키지 이름과 일치하는 디렉토리 구조에 나타나야한다는 것입니다. 바이트 코드를 올바른 디렉토리 구조에 넣지 않으면 컴파일러 또는 JVM이 클래스를 찾을 수 없습니다. 컴파일 된 바이트 코드 파일은 파일 이름과 일치하는 파일 시스템의 디렉토리 구조에 나타나야합니다. 예를 들어, .class   com.gnrcs.lab 의 모든 클래스 또는 인터페이스에 대한 파일  패키지는 \com\gnrcs\lab\ 와 일치하는 디렉토리 구조에 나타나야합니다.  . 이 디렉토리 구조를 직접 작성하거나 -d 를 사용할 수 있습니다  컴파일하는 동안 플래그를 지정하면 컴파일러가 필요한 디렉토리 구조를 생성하고 해당 디렉토리에 바이트 코드를 배치합니다.

    프로그램을 실행하려면 -classpath 를 추가해야합니다   java 를 실행하는 동안 플래그 . 예 : Temp 디렉토리에 있으면 java -classpath .\ com.gnrcs.lab.Main 를 사용할 수 있습니다 .

    간단히 말하면 다음을 수행하십시오.

    <올>

    javac -d .\ Main.java . 패키지 이름에 따라 디렉토리가 생성되고 해당 디렉토리에 바이트 코드가 저장됩니다. 당신의 경우에, ~/Temp/com/gnrcs/lab/Main.class .

    java -classpath .\ com.gnrcs.lab.Main . 여기에 완전한 이름을 지정해야합니다. -cp 를 사용할 수도 있습니다   -classpath 에 대한 바로 가기로 플래그 .

    (참고 : 리눅스 머신의 즉흥 연주)

관련 자료

  • 이전 App Engine Starts Compute Engine Instance - App Engine이 Compute Engine 인스턴스를 시작합니다IllegalAccessError
  • 다음 mysql - 임의의 행 ID로 사용할 행 수 선택