Problema Java da Prompt

di il
5 risposte

Problema Java da Prompt

Ciao a tutti,

ho da poco iniziato a programmare in Java e già mi trovo con un problema a cui da solo non riesco a venire a capo.
Come da titolo, il problema consiste nel lanciare un programma dal Prompt dei comandi. Ecco la situazione:

Ho scaricato Java JDK e ho salvato l'indirizzo della cartella /bin sotto PATH nelle variabili d'ambiente.
Ho creato il classico "HelloWorld".
Da prompt dei comandi, mi sono spostato fino alla cartella contenente il file "HelloWorld.java".
Ho eseguito la compilazione con
javac HelloWorld.java
, e mi si é giustamente creato il file "HelloWorld.class".

A questo punto però se provo a lanciare il programma con
java HelloWorld
mi esce il seguente codice di errore:
Errore: impossibile trovare o caricare la classe principale HelloWorld
.

Qualche informazione aggiuntiva:
-Per programmare uso l'IDE IntelliJ (dove peraltro non ho problemi a lanciare i programmi);
-Con il comando
java -version
ricevo il seguente output:
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
Già che ci sono ne approfitto per chiedere anche una cosa, ma non so bene se sia legata: in un corso mi é stato chiesto di assicurarmi che la mia versione di Java compili in Java8, come faccio a sapere se é così?


Se poteste aiutarmi ve ne sarei infinitamente grato, perché davvero non so più dove sbattere la testa...

5 Risposte

  • Re: Problema Java da Prompt

    Argiral ha scritto:


    ho salvato l'indirizzo della cartella /bin sotto PATH nelle variabili d'ambiente.
    Corretto.

    Argiral ha scritto:


    A questo punto però se provo a lanciare il programma con
    java HelloWorld
    mi esce il seguente codice di errore:
    Errore: impossibile trovare o caricare la classe principale HelloWorld
    .
    Qui ci sono due questioni (che gli IDE invece tendono a semplificare/nascondere ma che chi usa i tools del JDK "a mano" DEVE sapere): package e "classpath" e la loro correlazione.

    La tua classe HelloWorld è in un package? Hai una dichiarazione

    package qualcosa;

    all'inizio del sorgente? (e il sorgente è sotto una cartella qualcosa uguale al package?)

    Poi: hai una variabile di ambiente CLASSPATH? Se sì, cosa contiene?

    Argiral ha scritto:


    -Con il comando
    java -version
    ricevo il seguente output:
    java version "10.0.2" 2018-07-17
    Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
    Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)
    in un corso mi é stato chiesto di assicurarmi che la mia versione di Java compili in Java8, come faccio a sapere se é così?
    Hai un JDK10 e per default compila per Java 10. Se vuoi compilare con "target" Java 8, si deve passare al javac una apposita opzione (e in un IDE c'è sicuramente una opzione di progetto assimilabile).
  • Re: Problema Java da Prompt

    Allora,

    si, il programma si trova in un package con dichiarazione
    package primo.esempi;
    , che sono le due sottocartelle per arrivare al file partendo dalla cartella "Sources root" (spero si sia capito cosa intendo);

    no, non ho nessuna variabile d'ambiente CLASSPATH.

    Come risolvo dunque? Devo far riferimento anche al package quando lancio il programma? Anche se con il prompt mi trovo già dento alla cartella in questione ("esempi")? E per il CLASSPATH?

    Grazie mille per aver risposto subito!
  • Re: Problema Java da Prompt

    Argiral ha scritto:


    Allora,

    si, il programma si trova in un package con dichiarazione
    package primo.esempi;
    , che sono le due sottocartelle per arrivare al file partendo dalla cartella "Sources root" (spero si sia capito cosa intendo);

    no, non ho nessuna variabile d'ambiente CLASSPATH.

    Come risolvo dunque? Devo far riferimento anche al package quando lancio il programma?
    Allora devi stare da prompt nella cartella "Sources root" (insomma, quella che contiene il package "radice" che nel tuo caso è primo), poi dare:

    javac primo\esempi\HelloWorld.java

    poi

    java primo.esempi.HelloWorld


    NOTA!! al javac si passa un pathname del file .java. Al java si passa il NOME della classe completamente qualificato, NON un pathname.
  • Re: Problema Java da Prompt

    andbin ha scritto:


    Argiral ha scritto:


    Allora,

    si, il programma si trova in un package con dichiarazione
    package primo.esempi;
    , che sono le due sottocartelle per arrivare al file partendo dalla cartella "Sources root" (spero si sia capito cosa intendo);

    no, non ho nessuna variabile d'ambiente CLASSPATH.

    Come risolvo dunque? Devo far riferimento anche al package quando lancio il programma?
    Allora devi stare da prompt nella cartella "Sources root" (insomma, quella che contiene il package "radice" che nel tuo caso è primo), poi dare:

    javac primo\esempi\HelloWorld.java

    poi

    java primo.esempi.HelloWorld


    NOTA!! al javac si passa un pathname del file .java. Al java si passa il NOME della classe completamente qualificato, NON un pathname.
    Perfetto, così funziona! Grazie mille!

    Un ultima cosa: come faccio a lanciare i file in cui ho importato una libreria?
  • Re: Problema Java da Prompt

    Argiral ha scritto:


    Un ultima cosa: come faccio a lanciare i file in cui ho importato una libreria?
    Se la tua applicazione usa librerie esterne (non solo il framework standard), allora hai 1+ file .jar esterni. Li devi mettere "in classpath" (sia se vuoi compilare, che lanciare)

    Si usa l'opzione -classpath (o abbreviato -cp ), guarda l'help di javac/java
    E nota bene: in classpath devi anche mettere la cartella che contiene il tuo package "primo". Se sei nella root dei sorgenti, allora "." (=directory corrente) è valido.
Devi accedere o registrarti per scrivere nel forum
5 risposte