Problemi col Command Prompt

di il
10 risposte

Problemi col Command Prompt

Buongiorno, non è molto tempo che sono su Java, e scrivo i comandi utilizzando Eclipse (per ora trovandomi molto bene). Il problema è sorto quando ho voluto "ritornare" all'avvio da Command Prompt. Nello specifico se inserisco il comando(fa riferimento alla famigerata classe HelloWorld, a cui per prova ho messo un package helloWorld)

java -cp.; C:\Users\...\helloWorld.HelloWorld

mi restituisce:

Unrecognized option: -cp.;
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

Premetto che questo e molti altri programmi girano bene su Eclipse, e gira altrettanto bene se a forza di "cd" arrivo alla directory che lo contiene e lo avvio da lì.

Dove sbaglio?

10 Risposte

  • Re: Problemi col Command Prompt

    ciamba87 ha scritto:


    java -cp.; C:\Users\...\helloWorld.HelloWorld

    mi restituisce:

    Unrecognized option: -cp.;
    Error: Could not create the Java Virtual Machine.
    Error: A fatal exception has occurred. Program will exit.
    A parte il fatto che dopo -cp ci vuole uno spazio. E dopo lo spazio gli eventuali percorsi da mettere "in classpath" vanno messi come stringa unica separati con il separatore apposito ( ";" su Windows).

    Ma il problema è un altro. Al tool "java" ovvero il launcher della JVM si DEVE passare il nome completamente qualificato della classe ... NON un percorso sul file system!

    Avrai un percorso del tipo:

    C:\blablabla\helloWorld\HelloWorld.class

    Dovresti stare come directory "corrente" nella C:\blablabla (NON nella helloWorld) e dare il comando:

    java -cp . helloWorld.HelloWorld
  • Re: Problemi col Command Prompt

    Ok, grazie.
    A questo punto però non capisco la differenza tra inserire "java" o "java cp ." nel prompt.
    Per eseguire un file .class devo per forza essere nella directory (nel senso che devo averla come current directory sul prompt) che contiene il package?
  • Re: Problemi col Command Prompt

    ciamba87 ha scritto:


    A questo punto però non capisco la differenza tra inserire "java" o "java cp ." nel prompt.
    Per eseguire un file .class devo per forza essere nella directory (nel senso che devo averla come current directory sul prompt) che contiene il package?
    No, non necessariamente. Quando avvi la JVM essa ricerca e trova le classi SOLAMENTE basandosi sul "classpath".
    Il classpath è semplicemente un elenco di directory e/o file .jar che fanno da "base" per poter trovare le classi.

    La directory "corrente" ovviamente c'entra all'interno della applicazione ma solamente se hai usato riferimenti es. a immagini o altro con dei percorsi relativi.

    Immagina di avere una classe con nome completamente qualificato prova.HelloWorld
    Il file .class potrebbe essere ad esempio in:

    C:\Progetti\Java\prova\HelloWorld.class

    I nomi di package devono SEMPRE "riflettersi" nel nome delle cartelle e tra poco capirai perché.

    Se stai come directory corrente in C:\Progetti\Java puoi dare:

    java -cp . prova.HelloWorld

    Se NON hai la variabile di ambiente CLASSPATH (così la directory corrente è per default in classpath) oppure se CLASSPATH contiene il "." (=directory corrente), allora puoi evitare il -cp

    java prova.HelloWorld

    Ora se ti sposti in C:\ come directory corrente e dai il comando

    java -cp C:\Progetti\Java prova.HelloWorld

    la classe viene comunque trovata e avviata correttamente.

    Dal nome qualificato della classe, la JVM ricava un percorso relativo prova\HelloWorld.class e poi ragiona accodando questo percorso a tutti i percorsi "base" trovati in classpath. Quindi esiste un prova\HelloWorld.class sotto C:\Progetti\Java? Sì, stop.
  • Re: Problemi col Command Prompt

    Scusami sono un po' duro...

    sul prompt ora ho:
    C:\>C:\Users\Computer\Desktop helloWorld.HelloWorld
    (Ho spostato la cartella helloWorld che contiene HelloWorld.class sul desktop per trovarla subito)
    Lui risponde:
    Errore: impossibile trovare o caricare la classe principale cp.
  • Re: Problemi col Command Prompt

    ciamba87 ha scritto:


    sul prompt ora ho:
    C:\>C:\Users\Computer\Desktop helloWorld.HelloWorld
    (Ho spostato la cartella helloWorld che contiene HelloWorld.class sul desktop per trovarla subito)
    Se il file .class è nel percorso assoluto

    C:\Users\Computer\Desktop\helloWorld\HelloWorld.class

    (e "helloWorld" è il nome del package della classe)

    allora tutti questi seguenti sono VALIDI:

    Da C:\Users\Computer\Desktop
    java -cp . helloWorld.HelloWorld

    Da C:\Users\Computer
    java -cp Desktop helloWorld.HelloWorld

    Da C:\Users
    java -cp Computer\Desktop helloWorld.HelloWorld

    Da C:\
    java -cp Users\Computer\Desktop helloWorld.HelloWorld

    oppure QUALUNQUE sia la directory corrente, anche questo:
    java -cp C:\Users\Computer\Desktop helloWorld.HelloWorld
  • Re: Problemi col Command Prompt

    andbin ha scritto:


    oppure QUALUNQUE sia la directory corrente, anche questo:
    java -cp C:\Users\Computer\Desktop helloWorld.HelloWorld
    ok mi pare di aver usato questa forma...quindi da dove potrebbe derivare il messaggio di errore "impossibile trovare o caricare la classe principale cp"?

    La cosa mi interessa particolarmente perchè è "introduttiva" di un problema analogo nell'apertura dei .jar da prompt
  • Re: Problemi col Command Prompt

    Per cortesia, ascolta: se avevi un sorgente HelloWorld.java
    package helloWorld;
    
    public class HelloWorld {
        // .....
    }
    Allora:
    1) il nome completamente qualificato è helloWorld.HelloWorld
    2) il file HelloWorld.class DEVE stare in una cartella di nome helloWorld (esattamente il nome del package)
    E
    3) dove sia la helloWorld NON ha molta importanza. La cartella che contiene la helloWorld DEVE essere in classpath
  • Re: Problemi col Command Prompt

    Grazie della pazienza, andbin, ho trovato il problema:
    invece di scrivere "java cp . " devo scrivere "java -classpath". In questo modo mi apre anche i file .jar. Non so, forse cambia da un sistema operativo all'altro o da una versione della JVM all'altra, comunque ora funziona!
  • Re: Problemi col Command Prompt

    ciamba87 ha scritto:


    invece di scrivere "java cp . " devo scrivere "java -classpath".
    Non cp ma -cp !!
    E comunque sui JDK/JRE di Sun/Oracle recenti, -cp è sinonimo di -classpath. Sono davvero uguali, -cp è stato introdotto tanto tempo fa (mi pare nel Java 1.4 o 5 o giù di lì .. non ricordo) come abbreviazione di -classpath.

    ciamba87 ha scritto:


    In questo modo mi apre anche i file .jar. Non so, forse cambia da un sistema operativo all'altro o da una versione della JVM all'altra, comunque ora funziona!
    Un conto comunque è avviare direttamente un jar con

    java -jar xyz.jar

    Un altro conto è mettere il xyz.jar "in classpath" (con -cp/-classpath o con la variabile CLASSPATH) e poi avviare il nome della classe principale.

    L'avvio con -jar richiede che nel jar il "manifest" abbia l'attributo Main-Class che contiene il nome qualificato della classe (altrimenti come lo saprebbe? )
  • Re: Problemi col Command Prompt

    Hai ragione mancava il "-" ...grazie ancora!!!
Devi accedere o registrarti per scrivere nel forum
10 risposte