2012-05-11 17 views
20

Ho scritto un semplice programma pacchetto:Come compilare i pacchetti in 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(); 
       } 
     } 

Sto usando Ubuntu 10.04 & Quando compilo usando

java MyPack.AccountBalance 

ottengo il seguente messaggio:

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. 

Cosa c'è che non va? Per favore aiutatemi. Ho installato openjdk, devo installare altro? Sto usando Ubuntu 10.04, gentilmente aiutarmi

+0

Hai importato mypack.Balance nel saldo del conto? –

+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/ programmazione/java/J9c_PackageClasspath.html –

risposta

35

migliore è compilare ed eseguire le classi da fuori area che pacchetti:

Prima si compila con javac:

$javac MyPack/AccountBalance.java 

questo creerà un nuovo file nella cartella denominata MyPack AccountBalance.class

quindi è possibile eseguirlo:

$java MyPack.AccountBalance 

A proposito: è scoraggiato che i nomi dei pacchetti inizino con una maiuscola.

+0

Grazie mille ha funzionato .... grazie mille – user1388626

5

tenta di creare la cartella denominata MyPack e spostare .class file in essa contenuti o l'uso seguente riga di comando per compilare il codice Java e si muove i file .class nella cartella MyPack.

javac YourFileName.java -d . 

ed eseguire utilizzando,

java MyPack.AccountBalance 

Dai un'occhiata alla javac strumento

Dal doc strumento: per impostazione predefinita, il compilatore mette ogni file di classe nella stessa directory il suo file sorgente. È possibile specificare una directory di destinazione separata con -d (vedere Opzioni, sotto).

e package tutorial.

+0

ho compilato da javac AccountBalance.java ottenuto senza errori ci ma quando ho provato a correre utilizzando java MyPack.AccountBalance ho ottenuto il seguente messaggio: l' – user1388626

+0

@ user1388626 È necessario creare Cartella MyPack e sposta Balance.class e AccountBalance.class in essa. Oppure usa -d switch in modo che lo strumento javac crei la cartella del pacchetto. – adatapost

+0

Ho inserito il file AccountBalance.java nella cartella MyPack – user1388626

11

Quando si sta tentando di compilare la classe java, utilizzare l'opzione '-d' (destinazione) per specificare dove devono essere collocati i file .class.

javac -d "classes" AccountBalance.java 

e quando si esegue il programma, assicurarsi che stessa cartella è incluso nel vostro percorso di classe:

java -classpath "classes" MyPack.AccountBalance 
2

Se stai frequente compilazione e l'esecuzione tramite javac e java comandi quindi utilizzare

javac MyJavaClass.java && java MyJavaClass 

Questo compila la classe quindi esegue la classe appena compilata.

Nota: sostituire && con ; se si utilizza Windows powershell.

+0

con il comando 'java' non è necessario specificare l'estensione' .class', ma solo il nome classe completo della classe che contiene il metodo 'main' – user2340612

+1

@ user2340612 Ok, grazie, corretto. –

+0

Anche Windows utilizza questa sintassi. – Nahiyan

Problemi correlati