2013-08-07 1 views
0

현재 Java 및 컴파일러로 명령 프롬프트를 사용 중입니다. 그러나 때마다 나는 "안녕하세요"나는 아래의 오류 메시지를 얻을 내 테스트 클래스 다음에 자바 명령을 실행cmd java not working

지금은 내 "CLASSPATH"환경 변수를 확인한 다음과 같이이 올바른지
Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: hello/Hello) 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(ClassLoader.java:792) 
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482) 

: .; C : \ Program Files \ Java \ jdk1.7.0_25 \ bin; 나는 심지어 을 제거하려고 시도했습니다.; CLASSPATH 시작 부분에서 그러나 그것은 다른 아무것도하지 않았다. 이제 내 javac 명령은 내 .java 클래스의 .class 버전을 생성하여 정상적으로 작동합니다. 하지만 실제로는 java 명령을 실행할 수 없습니다.

그래서 클래스 파일로 내 파일을 컴파일 Hello.javajavac의 입력 한 내 클래스의 이름 안녕하세요이며했다. 하지만 입력하면 : 안녕하세요 안녕하십니까 위의 오류 메시지가 나타납니다. NetBeans IDE에서 프로그램을 테스트했는데 오류없이 완벽하게 작동합니다.

.class 파일을 실행하기 위해 내 java 명령을 실행하지 못하게 할 수있는 일이 무엇일까?

+0

올바른 폴더 변경 명령 ​​('cd')을 수행하여 클래스 폴더에 있음을 확인 했습니까? 그냥 생각 ... – snickers10m

+0

http://stackoverflow.com/questions/3081689/why-cant-i-run-my-java-hello-world-program-if-it-is-inside-a-package?rq = 1이 링크를 사용하면 – Zack

+0

예 snickers 나는 올바른 디렉토리에 있습니다. – subless

답변

5

The name of my class is Hello so I typed javac Hello.java to compile my file as a class file and it worked. But when I enter: java Hello

가장 큰 문제는 Java 프로그램을 실행하는 동안 패키지 구조와 함께 전체 클래스 이름을 넣지 않는 것입니다.

java com.my.hello.Hello 

:

java packagenhierarchy.Hello 

이 패키지 이름은 com.my.hello이며, 메인 클래스 이름은 다음과 같이 최상위 레벨 패키지를 포함하는 디렉토리에서 실행해야합니다 Hello입니다 가정 : 여기에 언급 한 바와 같이 그것은 실행해야합니다 업데이트 : 귀하의 의견을 당과 작업 디렉토리를 알고으로, 여기 당신이 실행해야합니다 것입니다 :

java -cp C:\hello\src\hello hello.Hello 
+0

전체 경로 이름 "java hello.Hello"를 시도했지만이 오류가 발생합니다. ** 기본 클래스 hello.Hello **를 찾거나로드 할 수 없습니다. – subless

+0

@subless, 어떤 디렉토리에서 java 명령을 실행하고 있습니까? 또한 .class 파일 생성 여부에 관계없이 javac 명령을 사용했는지 확인 했습니까? –

+1

정확하게 대답했습니다. –

2

도구가 어떻게 동작하는지 이해해야합니다 (javac과 약간 다름).

  1. 클래스 경로에 있어야 main(String[] args) 방법이있다 클래스 : java 명령 줄 명령을 사용하여 프로그램을 실행하기 위해.
    java com.mypackage.Hello 
    

당신이 변수 CLASSPATH으로 클래스 경로를 설정하는 것이 가정 : 같은 대신 당신이 완전한 이름을 사용해야합니다 java Hello 유형의
  • .그렇지 않으면, 다음과 같이해야합니다 :

    java -cp C:\projects\myprojct\bin com.mypackage.Hello 
    

    bin 다음과 같은 계층 구조를 가지고있는 루트 디렉토리라고 가정 :

    사용하지 않는 경우 있음을

    bin - 
        | 
        com - 
         | 
         mypackage - 
            | 
            Hello.class 
    
    CLASSPATH-cp-classpath이 아니라면 현재 디렉토리는 기본적으로 classpath에 있습니다. 즉, 다음 작동해야합니다.

    cd C:\projects\myprojct\bin 
    java com.mypackage.Hello 
    
  • +1

    정답. –

    1

    어쩌면 현재 경로가 클래스 경로에 없습니다. 시도해보십시오.

    java -cp pathToYourHelloCompiledFile Hello 
    

    경로를 클래스 경로로 제공하는 위의 폴더에는 Hello.class 파일이 있어야합니다.

    +0

    주 클래스에 패키지 이름이있는 경우에는 작동하지 않습니다. 주 클래스에 패키지 이름이없는 경우 작동하는지 잘 모르겠습니다. –

    +0

    패키지 이름이 없으면이 기능이 제대로 작동합니다. 직접 사용해 보았습니다. 패키지 이름에도 확실하지 않습니다. –