2013-08-07 46 views
0

我目前正在學習Java和使用我的命令提示符作爲編譯器。但每次我執行的java命令,隨後我的測試類「你好」,我得到了以下錯誤信息:cmd java不能正常工作

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) 

現在我已經檢查了我的「CLASSPATH」環境變量,它是正確的,如下所示: 。; C:\ Program Files \ Java \ jdk1.7.0_25 \ bin;我甚至嘗試刪除。從CLASSPATH開始的,但它沒有做任何不同的事情。現在我的javac命令通過創建我的.java類的.class版本來工作得很好。但我無法實際執行java命令。

我的類的名稱是你好所以我打的javac Hello.java編譯我的文件作爲一個類文件和它的工作。但是當我輸入:java你好是當我得到上述錯誤信息。我已經在我創建的NetBeans IDE上測試了該程序,並且它沒有錯誤地運行正常。

什麼可能會阻止我執行我的java命令來運行.class文件?

+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

是的竊笑我在正確的目錄。 – 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 packagenhierarchy.Hello 

假設你的包名是com.my.hello和你的主類名是Hello那麼它應該從包含頂級包作爲目錄中運行:

java com.my.hello.Hello 

這裏提到應該運行UPDATE:按您的意見和了解工作目錄,這裏是你應該運行什麼:

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

我試過完整的路徑名「java hello.Hello」,但它只是給了我這個錯誤:**無法找到或加載主類hello.Hello ** – subless

+0

@subless,從哪個目錄運行java命令?當你使用javac命令時,你是否也檢查過是否生成了.class文件? –

+1

正確回答。 –

2

您需要了解java工具的工作方式,與javac的工作方式略有不同。爲了與java命令行命令運行一個程序:

  1. 具有main(String[] args)方法應該是在類路徑的類。
  2. 相反類型java Hello你應該使用完全合格的名稱,如:
java com.mypackage.Hello 

假設你設定的類路徑變量CLASSPATH。否則,它應該是這樣的:

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

假設bin是具有以下層次的根目錄:

bin - 
    | 
    com - 
     | 
     mypackage - 
        | 
        Hello.class 

請注意,如果你不使用既不CLASSPATH也不-cp也不是-classpath,那麼當前目錄默認是在類路徑中。換句話說,以下內容應該有效:

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

正確回答。 –

1

也許您當前的目錄不在Class路徑中。嘗試

java -cp pathToYourHelloCompiledFile Hello 

你必須有一個Hello.class文件在你上面的文件夾其路徑您提供的類路徑。

+0

如果主類具有包名,這將不起作用。我不確定在主要類沒有包名的情況下它是否可以工作。 –

+0

我非常確定這是有效的,如果沒有包名稱因爲我自己嘗試過。不知道包名稱。 –