2009-01-20 11 views
109

Ho letto le esercitazioni Java su Sun per i file JAR, ma non riesco ancora a trovare una soluzione per il mio problema. Ho bisogno di usare una classe da un file jar chiamato jtwitter.jar, ho scaricato il file e ho provato ad eseguirlo (ho scoperto ieri che i file .jar possono essere eseguiti facendo doppio clic su di essi) e Vista mi ha dato un errore dicendo " Impossibile caricare l'attributo Manifest dalla classe principale da [percorso] /jtwitter.jar ".Come utilizzare le classi da file .jar?

Il tizio che ha codificato il file .jar vuole che lo importi, ma dove memorizzo il file .jar per importarlo nel mio codice? Ho provato a mettere entrambi i file .jar e il mio file .java nella stessa directory, non ha funzionato.

Il file che sto cercando di lavorare per è qui: http://www.winterwell.com/software/jtwitter.php

sto usando JCreator LE.

+13

Perché c'è un downvote? A mio parere, è una buona domanda e ci sono informazioni interessanti nelle risposte! (+1) – guerda

risposta

26

Non tutti i file jar sono eseguibili.

Ora, è necessario importare le classi, che sono lì sotto il barattolo, nel file java. Ad esempio,

import org.xml.sax.SAXException; 

Se si sta lavorando su un IDE, è necessario fare riferimento alla relativa documentazione. O almeno specifica quale stai usando qui in questo thread. Ci consentirebbe sicuramente di aiutarti ulteriormente.

E se non si utilizza alcun IDE, controllare l'opzione javac -cp. Tuttavia, è molto meglio ideare il pacchetto in un file jar e includere tutti i necessari jar s. Quindi, al fine di eseguire il jar, come,

java -jar my_program.jar 

si dovrebbe avere un file META-INF/MANIFEST.MF nel jar. Vedi here, per istruzioni.

5

È necessario inserire il file .jar nel classpath durante la compilazione/esecuzione del codice. Quindi si usano solo le importazioni standard delle classi nel file .jar.

6

Come dice workmad3, è necessario che il file jar si trovi nel classpath. Se stai compilando dalla riga di comando, ciò significherà usare il flag -classpath. (Evita la variabile di ambiente CLASSPATH: è un dolore al collo IMO.)

Se stai utilizzando un IDE, faccelo sapere quale e possiamo aiutarti con i passaggi specifici per quell'IDE.

+0

variabile env classpath è utile se si utilizzano script o qualcosa del genere come firedaemon per eseguire l'app. È solo un dolore quando lo usi globalmente :) – workmad3

+0

Mi piace ancora vederlo esplicitamente. –

+0

Sono d'accordo, mi piace vederlo esplicitamente. – J3r3myK

10

È necessario aggiungere il file jar nel classpath. Per compilare la classe Java:

javac -cp .;jwitter.jar MyClass.java 

Per eseguire il codice (a condizione che MyClass contiene un metodo main):

java -cp .;jwitter.jar MyClass 

si può avere il file jar da nessuna parte. Quanto sopra funziona se il file jar si trova nella stessa directory del file java.

142

Diciamo che abbiamo bisogno di usare la classe Classname che è contenuta nel file jar org.example.jar

E la sorgente è nel file mysource.java Ti piace questa:

import org.example.Classname; 

public class mysource { 
    public static void main(String[] argv) { 
    ...... 
    } 
} 

In primo luogo, come si vede, in il tuo codice devi importare le classi. Per farlo è necessario import org.example.Classname;

In secondo luogo, quando si compila il codice sorgente, è necessario fare riferimento al file jar.

Si prega di notare la differenza nell'uso : e ; durante la compilazione

  • Se hai meno di un UNIX come sistema operativo:

    javac -cp '.:org.example.jar' mysource.java 
    
  • Se siete sotto le finestre:

    javac -cp .;org.example.jar mysource.java 
    

Dopo questo, si ottiene il file bytecode mysource.class

Ora è possibile eseguire questo:

  • Se hai meno di un UNIX come sistema operativo:

    java -cp '.:org.example.jar' mysource 
    
  • Se hai meno windows:

    java -cp .;org.example.jar mysource 
    
+4

Potresti spiegare un po 'di più questa notazione? Questo ha risolto il mio problema, ma sfortunatamente non ho IDEA che cosa significhi il punto e virgola/i due punti in questo caso particolare. – cemulate

+1

Questa storia di punto e virgola/colon mi ha appena costato l'intera giornata. Almeno l'ho trovato ora, grazie! –

+1

@ChaseMeadors Il [punto e virgola] (http://technet.microsoft.com/en-us/library/cc772047.aspx)/[colon] (http://www.gnu.org/software/bash/manual/bashref .html # index-PATH) significa essenzialmente "e" qui. Separa '.' da' org.example.jar'. – duozmo

Problemi correlati