2009-12-22 10 views
6

Mi piacerebbe fare cli cli "doppio clic", ma ancora non capisco come. So che dovrei in qualche modo modificare manifest ma questo è tutto. Ho cercato su Google. ma nessun successo. Grazie per eventuali suggerimenti. Qui è l'uscita da costruire, correre, e manifesta:Come creare un file .jar eseguibile con netbeans

compile: 
Created dir: /home/nick/NetBeansProjects/SemestralWork/dist 
Building jar: /home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar 
Not copying the libraries. 
To run this application from the command line without Ant, try: 
java -jar "/home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar" 
jar: 
BUILD SUCCESSFUL (total time: 1 second) 


java -jar /home/nick/NetBeansProjects/SemestralWork/dist/SemestralWork.jar 

Exception in thread "main" java.lang.NoClassDefFoundError: semestralwork/Main 
Caused by: java.lang.ClassNotFoundException: semestralwork.Main 
    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:319) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:264) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332) 
Could not find the main class: semestralwork.Main. Program will exit. 

MY MANIFEST created with build: 

Manifest-Version: 1.0 

Ant-Version: Apache Ant 1.7.1 

Created-By: 14.0-b08 (Sun Microsystems Inc.) 

Main-Class: semestralwork.Main 

Class-Path: 

X-COMMENT: Main-Class will be added automatically by build 

risposta

0

Il percorso di ricerca di classe di default può essere il problema. Dovresti provare a cambiare directory nella posizione in cui si trova il jar e avviare con java -jar Semestral.jar. Inoltre potresti aver sbagliato nome alla classe principale. Si prega di includere anche la struttura del pacchetto.

0

Aprire il file JAR con uno strumento ZIP (o provare less ... se si è su Linux o jar tvf ...). Assicurati che ci sia una directory semestralwork che contiene un file Main.class.

+0

c'è solo il metodo chiamato "encryption.class" che chiamo dal metodo principale – landscape

+0

Questo è il tuo problema, allora. Alla classe manca il JAR, motivo per cui Java non riesce a trovarlo. –

1

È più semplice creare un file .exe da un .jar senza netbeans. Qui sono i miei suggerimenti: 1. Utilizzare una speciale applicazione per questo (es: JSmooth, JEXECreator ecc) 2. fare un programma C++ che inizia una JVM (si veda questo tutorial)

6

Queste due linee tutto quello che dicono bisogno di sapere:

Exception in thread "main" java.lang.NoClassDefFoundError: semestralwork/Main 
Caused by: java.lang.ClassNotFoundException: semestralwork.Main 

e un ulteriore indizio è sceso di uscita manifesta:

Main-Class: semestralwork.Main 

Ciò significa che il file JAR è alla ricerca di un pacchetto chiamato semestralwork e una classe denominata Main al suo interno. A questo punto non riesce perché non riesce a trovare né il pacchetto semestralwork né la classe Main.

Come hai sottolineato nella tua domanda, il problema è effettivamente nel file manifest. È possibile modificare questo direttamente nel file JAR, se volete, ma un'idea migliore sarebbe quella di fare questo da Netbeans:

  • Clicca su `File -> Proprietà del progetto (semestralwork)'
  • Nella finestra di dialogo che si apre, l'albero a sinistra selezionare Run
  • Poi, sulla destra, sotto il campo etichettato Main class:, immettere il completo nome di classe della classe che si desidera eseguire quando viene eseguito da linea di comando.

Nel tuo caso, per come la vedo dal tuo commento su @ risposta di Aaron, se la classe principale è in un file chiamato encryption.java, ed è nel pacchetto di default (nessun pacchetto), basta inserire encryption.

Una volta eseguita questa operazione, effettuare una pulizia e compilazione, quindi provare nuovamente a eseguirlo dalla riga di comando.

HTH

4

Da quando ho incontrato lo stesso problema, posso chiarire la soluzione un po '.

È necessario creare una classe Java principale esterna al metodo (ad esempio cartella default_package), quindi richiamare il metodo (cartella), ad esempio import your_folder.connected_class; nella classe principale.

Spero di poter aiutare qualcuno con lo stesso problema.

0

È facile. Scarica una copia di netbeans. Crea un nuovo progetto in netbeans. Vai alla tua classe principale in Esplora progetti. Questa dovrebbe essere la cartella "YourProject" Come classe YOURPROJECT.JAVA. È questo il file yourproject.java con cui si desidera iniziare. Basta scrivere il tuo codice nell'area principale vuota statica pubblica. È possibile eseguire il programma con il pulsante di riproduzione verde nella barra degli strumenti superiore.