2012-05-11 93 views
20

我寫了一個簡單的包裝程序:如何在java中編譯包?


//A simple package 

     package MyPack 


     class Balance 
     { 
     String name; 
     double bal; 

     Balance(String n, double b) 
     { 
      name=n; 
        bal=b; 
      } 

     void show() 
      { 
      if(bal<0) 
      System.out.println("-->"); 
      System.out.println(name+ ": $:" +bal); 
     } 
     } 

     class AccountBalance 
     { 
      public static void main(String args[]) 
      { 
         Balance current[]=new Balance[3]; 
        current[0]=new Balance("A.K.Juwatkar",123.123); 
        current[1]=new Balance("A.P.Dhoke",345.67); 
        current[2]=new Balance("Anil Sarang",100.98); 

        for(int i=0;i<3;i++) 
       current[i].show(); 
       } 
     } 

我使用Ubuntu 10.04 & 當我把它用

java MyPack.AccountBalance 

我收到以下消息編譯:

Exception in thread "main" java.lang.NoClassDefFoundError: MyPack/AccountBalance 
Caused by: java.lang.ClassNotFoundException: MyPack.AccountBalance 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266) 
Could not find the main class: MyPack.AccountBalance. Program will exit. 

出了什麼問題?請幫助我。 我已經安裝了openjdk,我是否需要安裝其他的東西? 我使用Ubuntu 10.04,請幫我出

+0

您是否在帳戶餘額中導入了mypack.Balance? –

+0

http://shivasoft.in/blog/java/compile-and-run-java-program-in-package-from-command-line/ – Maddy

+0

http://www.ntu.edu.sg/home/ehchua/編程/ JAVA/J9c_PackageClasspath.html –

回答

35

最好是編譯和包外運行的類:

$javac MyPack/AccountBalance.java 

這將創建一個名爲AccountBalance.class

的MyPack文件夾中的新文件:

首先,你用javac編譯

那麼你就可以運行它:

$java MyPack.AccountBalance 

順便說一句:不鼓勵包名以大寫字母開頭。

+0

非常感謝,結果....非常感謝 – user1388626

5

嘗試創建一個名爲MyPack的文件夾和移動的.class文件中,或使用下面的命令行編譯java代碼,並將其移動.class文件到文件夾MyPack

javac YourFileName.java -d . 

和使用運行,

java MyPack.AccountBalance 

看一看javac工具

從工具DOC:默認情況下,編譯器把每個類文件在同一目錄中 其源文件。您可以使用 -d指定一個單獨的目標目錄(請參閱下面的選項)。

and package教程。

+0

我通過 的javac編譯AccountBalance.java 有沒有錯誤,還有 但是,當我嘗試使用 的Java MyPack.AccountBalance 跑我得到了以下信息: – user1388626

+0

@ user1388626您需要創建MyPack文件夾並在其中移動Balance.class和AccountBalance.class。或者使用-d開關,以便javac工具創建包文件夾。 – adatapost

+0

我已將AccountBalance.java文件放入MyPack文件夾中 – user1388626

11

當您嘗試編譯Java類時,請使用'-d'選項(目標)來指定.class文件應該放在哪裏。

javac -d "classes" AccountBalance.java 

,當你運行你的程序,確保同一文件夾包含在類路徑:

java -classpath "classes" MyPack.AccountBalance 
2

如果你經常編譯和運行通過javacjava命令,然後使用

javac MyJavaClass.java && java MyJavaClass 

這將編譯該類,然後運行剛剛編譯的類。

注意:如果使用Windows PowerShell,請將&&替換爲;

+0

用'java'命令你不需要指定'.class'擴展名,但只需要包含'main'方法的類的全限定類名稱 – user2340612

+1

@ user2340612好的,謝謝,修正。 –

+0

Windows也使用這種語法。 – Nahiyan