2010-02-16 6 views
25

Utilizzo di Eclipse Ho creato un programma SWT Hello World. Sono stato in grado di eseguire questo programma da Eclipse e ha funzionato bene.Posso eseguire dal programma della riga di comando creato da Eclipse?

In "/ home/myname/workspace/HelloWorldSWT" ho trovato due file: HelloWorldSWT.java e HelloWorldSWT.class. Volevo eseguire il programma corrispondente dalla riga di comando. Per prima cosa ho provato a digitare "java HelloWorld" e ho ottenuto il seguente messaggio di errore:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld 
    at gnu.java.lang.MainThread.run(libgcj.so.90) 
Caused by: java.lang.ClassNotFoundException: HelloWorld not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}} 
    at java.net.URLClassLoader.findClass(libgcj.so.90) 
    at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90) 
    at java.lang.ClassLoader.loadClass(libgcj.so.90) 
    at java.lang.ClassLoader.loadClass(libgcj.so.90) 
    at gnu.java.lang.MainThread.run(libgcj.so.90) 

Ho provato anche questo "java -cp/home/roman/workspace/HelloWorld.HelloWorld". Come risultato ho ricevuto il seguente messaggio di errore:

Exception in thread "main" java.lang.NoClassDefFoundError: loaded class HelloWorld.HelloWorld was in fact named HelloWorld 
    at java.lang.VMClassLoader.defineClass(libgcj.so.90) 
    at java.lang.ClassLoader.defineClass(libgcj.so.90) 
    at java.security.SecureClassLoader.defineClass(libgcj.so.90) 
    at java.net.URLClassLoader.findClass(libgcj.so.90) 
    at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.90) 
    at java.lang.ClassLoader.loadClass(libgcj.so.90) 
    at java.lang.ClassLoader.loadClass(libgcj.so.90) 
    at gnu.java.lang.MainThread.run(libgcj.so.90) 

Qualcuno sa cosa sto facendo male? Grazie in anticipo per qualsiasi aiuto.

risposta

2

È possibile che non si stia caricando la libreria SWT correttamente e di conseguenza la classe non viene caricata.

La libreria SWT fa parte di jar già caricati quando si esegue Eclipse ma non vengono caricati in un parametro della riga di comando. Hai modificato il tuo percorso di classe di conseguenza?

Ecco un vecchio articolo su come fare questo genere di cose nelle vecchie versioni di Eclipse http://www.ibm.com/developerworks/opensource/library/os-ecgui1/ Avrete bisogno di diversi vasi di oggi con l'ultima versione fo Eclipse. Potrebbe anche arrivare a un singolo barattolo.

Verificare lo SWT FAQ; almeno per Mac Carbon, puoi usare un singolo barattolo, scommetto che puoi farlo per altre piattaforme.

Inoltre, non sono sicuro al 100% che è possibile eseguire Eclipse con openJDK, che sembra essere il caso sulla propria piattaforma.

+0

Grazie per la risposta. Sono un novizio in Java e non ne capisco l'essenza. Voglio dire, mi sembra strano che abbiamo bisogno di usare alcuni modi complicati per eseguire applicazioni SWG senza Eclipse. Qual è l'uso del programma scritto in Eclipse se può essere facilmente eseguito solo all'interno di Eclipse? – Roman

+0

Se si desidera un'applicazione GUI di facile esecuzione in Java, non utilizzare SWT, ma Swing. Se si utilizza SWT, è necessario gestirne le dipendenze. Quando si crea un'applicazione RCP, la piattaforma gestisce queste dipendenze, ma nel caso di programmi standard è necessario dipendere dai jar SWT utilizzando i classpath. –

1

Questo è il problema causato dal fatto che JVM non è in grado di trovare la classe HelloWorld poiché il nome della classe è HelloWorldSWT con il metodo principale in esso. provare con

java HelloWorldSWT

+0

ho provato "java -cp/home/roman/workspace/HelloWorldSWT.HelloWorldSWT" e "Java HelloWorldSWT". Entrambi non hanno funzionato. – Roman

66

Vai alla prospettiva di debug, e selezionare il programma basta eseguire (dove dice Termintated, valore di uscita ... nella scheda Debug) Fare clic destro e selezionare Proprietà, lì puoi vedere l'intero comando della riga di comando lanciato da eclipse.

È possibile eseguire lo stesso comando nella stessa direclip (vedere in Run Configurations, Arguments, Directory di lavoro) e funzionerà.

+0

Non riesco a trovare la "prospettiva di debug". Dove è? – Roman

+0

Scegli di aggiungere una prospettiva e puoi scegliere il Debug uno tra gli altri – Persimmonium

+1

+1. Il modo più semplice per trovare il comando completo da eseguire. Ho dovuto cambiare javaw.exe in java.exe, rimosso alcune opzioni non necessarie e funzionava come un incantesimo. – understack

7

È necessario aggiungere la directory in cui eclipse sta memorizzando il file HelloWorldSWT.class nel classpath. Viene definito al momento della creazione del progetto, come "bin", "build" o "classes". Controlla le proprietà del progetto o cerca nel file HelloWorldSWT.class.

Supponendo che è la directory build all'interno dello spazio di lavoro HelloWorldSWT e che la classe non è in alcun package (pacchetto di default), il comando dovrebbe essere:

java -cp /home/roman/workspace/HelloWorldSWT/build HelloWorldSWT 

o semplicemente passare a quella directory ed impiego:

java -cp . HelloWorldSWT 

EDIT:
il -cp . significa che solo la directory attuale viene utilizzato per trovare i file di classe. È inoltre necessario aggiungere tutte le librerie (JAR o altre directory) utilizzate dal programma (database, SWT, ...).
Per maggiori dettagli si può avere uno sguardo alla documentazione: How Classes are Found, Setting the Classpath e java comand

+0

Ho trovato HelloWorldSWT.class. Si trova in "/ home/myname/workspace/HelloWorldSWT /". Vado in questa directory e digito "java -cp. HelloWorldSWT". Come risultato viene visualizzato un messaggio di errore: Exception in thread "main" java.lang.NoClassDefFoundError: org.eclipse.swt.widgets.Display – Roman

+0

@Roman: questo è il problema successivo: è necessario aggiungere tutte le librerie necessarie per il ' Variabile d'ambiente CLASSPATH' o all'argomento '-cp'; esempio: 'java -cp.: lib/somelib.jar: ... HelloWorldSWT'. Ho modificato la mia risposta aggiungendo un link alla documentazione (sono sicuro che la domanda CLASSPATH è stata risolta da qualche altra parte su stackoverflow.com) –

1

non è stato impostato correttamente classpath poi.

Penso che di solito è più comodo avere l'IDE creare un file jar con tutte le librerie non jre incluse ed eseguirlo dalla riga di comando.

java-jar myprogram.jar

What is the use of the program written in Eclipse if it can be easily executed only within the Eclipse?

che è veramente una buona domanda, e l'implementazione di applicazioni Java è davvero un'arte in sé. Sia la compilazione che l'esecuzione sono - se non complicate - almeno ingombranti quando eseguite a mano. Ma Eclipse e altri strumenti come Netbeans possono aiutarti a svolgere queste attività in modo semplice e persino a impacchettare il tuo programma per te in modo che anche altri che non usano questi strumenti possano eseguire facilmente i programmi.

3

Mi sembra non si dispone di una classe denominata HelloWorldSWT``, ma piuttosto una classe denominata HelloWorldSWT in un pacchetto chiamato HelloWorldSWT (È possibile confermare questo andando alla prima linea di HellowWorldSWT.java, dove troverete package HelloWorldSWT;

Se è così, andare nella directory genitore e digitare

java HelloWorldSWT.HelloWorldSWT Questo potrebbe funzionare.

+0

Ha funzionato per me. Volevo solo testare Hello world – user2963623

1

Se si desidera eseguire il programma con gli argomenti della riga di comando dall'interno di Eclipse si può andare a Run-> Run configurazioni, w aprirà una finestra con il programma in esecuzione e una casella in cui è possibile inserire argomenti.

1

Ho trovato un'altra soluzione rapida e sporca se si desidera vedere solo l'output sulla riga di comando. Ma questo è non è una buona pratica per il lungo termine!

  1. Rimuovere la dichiarazione del package nel codice (Eclipse si lamentano e vi darà una croce rossa, ignorare che il primo), per esempio package hello;

  2. Salva.

  3. Aprire la riga di comando e navigare fino a quando non si è nella cartella src (utilizzare cd).

  4. Compilare il file java, ad es.javac HelloWorld.java

  5. Eseguire il file di classe Java, per esempio java HelloWorld

Si dovrebbe funzionare, a patto che ci si trova nella directory corretta, senza alcuna dichiarazione package nel codice! Le dichiarazioni dei pacchetti causano problemi ... ed Eclipse è configurato per assicurarsi che tutto funzioni così è per questo che va bene avere le dichiarazioni dei pacchetti lì. Una soluzione alternativa è quella di andare veramente e impostare il classpath da solo (che mi confonde sempre ogni volta che devo farlo, cosa che faccio raramente).

3

Sono uno soluzione in modo da trarre il massimo vantaggio della convenienza Eclipse. Di seguito è quello che ho trovato, e ha funzionato bene per me. Spero che vi aiuterà: enter image description here

Problemi correlati