Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123

    errore package+classpath

    Ciao a tutti,
    ho un problema con la creazione di package personale.

    mio classpath :
    .;C:\Program Files\Java\jre6\lib;C:\Users\Davide\Desktop\codice _libro_java;C:\ProgramFiles\Java\jdk1.6.0_18\src;C :\Users\Davide\mypackage\

    ho provato a fare un semplicissimo package per verificarne il funzionamento
    entrambi i fili che ora vi mostrerò si trovano nel percorso
    C->Utenti->Davide->mypackage->mytools
    //file Prove.java
    import mytools.*;
    public class Prove {
    public static void main(String[] args) {
    P.rintln("" +100);
    P.rintln("Ti prego funziona!!!");
    }
    }

    //file P.java
    package mytools;
    public class P {
    public static void rint(String s) {
    System.out.print(s);
    }
    public static void rintln(String s) {
    System.out.println(s);
    }
    }

    questi sono i miei due file super banali, ho provato e riprovato ma niente...l'ultima novità che ho aggiunto questa mattina è stata quella di aggiungere il "." nel classpath perchè così mi ha detto un mio amico (perchè il punto starebbe ad indicare la directory corrente se ho ben capito)
    Se vi è un'anima buona che mi può aiuterà gliene sarei grato, non riesco a muovermi da qui(volevo riuscire a risolverlo da solo perchè non mi piace chiedere sempre aiuto agli altri però dopo 3 giorni mi sono arreso).

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: errore package+classpath

    Originariamente inviato da bobo24
    mio classpath :
    .;C:\Program Files\Java\jre6\lib;C:\Users\Davide\Desktop\codice _libro_java;C:\ProgramFiles\Java\jdk1.6.0_18\src;C :\Users\Davide\mypackage\
    Innanzitutto non serve mettere la lib del jre in classpath. Anche perché lì sotto non ci sono e non ci devono essere classi "sciolte" (.class).
    A volte, ad esempio se si sviluppano applet, può servire mettere in classpath per la compilazione il plugin.jar della lib ... ma è un altro conto e qui ora non centra.
    Quella src sotto jdk1.6.0_18 non so cosa sia, se roba tua o se sono i sorgenti scompattati del framework. Se è roba tua comunque non dovrebbe stare lì sotto.

    Originariamente inviato da bobo24
    ho provato a fare un semplicissimo package per verificarne il funzionamento

    questi sono i miei due file super banali, ho provato e riprovato ma niente...
    No, allora fai le cose molto più semplici.

    In CLASSPATH solo il . (punto) che significa "directory corrente".

    set CLASSPATH=.

    In C:\Utenti\Davide\mypackage metti Prove.java (la classe senza package)
    In C:\Utenti\Davide\mypackage\mytools metti P.java (la classe nel package mytools)

    Ora, stando dal prompt come directory "corrente" in C:\Utenti\Davide\mypackage fai:

    javac Prove.java

    e tutto si compilerà correttamente. E per avviarlo chiaramente:

    java Prove
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    Ciao andbin,
    grazie mille ho fatto tutto quello che mi hai detto...il classpath l'ho impostato solo con il "." ed ora da prompt funziona tutto ok.

    Ho provato con Netbeans ed invece qua continua a darmi problemi, per caso hai qualche idea di dove possa sbagliare?

    perchè alla riga di codice import mytools.*;
    mi dice package mytools does not exist

    ed in P.rintln("" +100);
    mi dice cannot find symbol...symbol:variable P...location:class Prove2

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bobo24
    Ho provato con Netbeans ed invece qua continua a darmi problemi, per caso hai qualche idea di dove possa sbagliare?

    perchè alla riga di codice import mytools.*;
    mi dice package mytools does not exist

    ed in P.rintln("" +100);
    mi dice cannot find symbol...symbol:variable P...location:class Prove2
    Nel progetto in NetBeans devi chiaramente continuare a mettere le classi nel loro giusto "package". Ovvero Prove non in un package (quello che si chiama default package o "unnamed" package) mentre P nel package mytools.
    Non conosco/uso NetBeans ma dovresti avere un pannello che mostra la struttura del progetto che visualizza in modo gerarchico i file/cartelle. Bene, sotto la directory dei sorgenti (che potrebbe chiamarsi src o sources o altro ... non so) devi ricreare quanto ho detto sopra.

    E ricorda sempre la regola fondamentale sui package: i nomi dei package si devono sempre "riflettere" nella struttura delle cartelle. Vale sia per classi "sciolte" (.class nel file-system) che classi nei JAR.
    Quindi per una classe com.prova.Pippo, Pippo.class deve stare sotto un path .....\com\prova e la directory che contiene la "com" deve essere in classpath.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    la lotta contro netbeans purtroppo al momento l'ho persa infatti non riesco assolutamente a farlo funzionare...
    però andbin ti ringrazio tantissimo per avermi aiutato ad avermelo fatto funzionare almeno tramite prompt
    e poi ti volevo chiedere se mi potevi dire giusto che così mi schiarisco le idee una volta per tutte, cosa devo inserire nel path e nel classpath(insomma qual'è la loro differenza)...

    mentre se avete nuove idee per aiutarmi riguardo netbeans sono tutto orecchie (ricordo che il mio problema è che non riesco a creare package)...

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    scusa andbin,
    c'è una grossa novità dell'ultimo secondo, la lotta contro netbeans l'ho vinta io proprio cinque minuti dopo che ho scirtto il post precedente...ed ancora una volta devo ringraziare te perchè ho letto e riletto quello che mi ha scritto e mi è stato molto utile perchè infatti per il fatto di src ci avevi preso pienamente...
    quindi un grazie immenso

    però la domanda su path e classpath la confermo perchè voglio capire bene queste cose, perchè ho il presentimento che non sarà l'ultima volta che le inconterò nello studio di java

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da bobo24
    cosa devo inserire nel path e nel classpath(insomma qual'è la loro differenza)...
    La variabile di ambiente PATH rappresenta il "percorso di ricerca" degli eseguibili (qualunque cosa sia trattato come eseguibile nativamente dal sistema, .exe, .bat di Windows ecc...). E non centra nulla con Java di per sé.
    Se in PATH c'è una directory che contiene degli eseguibili, allora da prompt potrai semplicemente digitare eseguibile.exe invece di dover dare C:\...blabla\eseguibile.exe. La utilità del PATH in genere è questa.
    Se usi un JDK allora in genere è bene mettere in PATH la directory 'bin' del JDK, così puoi usare i tools del JDK comodamente.

    CLASSPATH rappresenta invece il "percorso di ricerca" delle classi Java a livello "utente". Esistono infatti dei posti predefiniti dal runtime Java dove cercare classi di sistema prima di andare ad usare lo user classpath.
    Nel classpath in generale si possono mettere riferimenti a directory o file .jar/.zip. Questi vengono usati per comporre il path per trovare ed usare le classi.

    Esempio: in classpath c'è: C:\Prove;C:\Librerie\mylib.jar

    La JVM ad un certo punto ha bisogno di trovare la classe org.prova.Esempio ... cosa fa? Supponendo che non sia trovabile tra le classi di sistema, allora usa lo "user" classpath.

    Prima cerca un C:\Prove\org\prova\Esempio.class poi cerca un org/prova/Esempio.class dentro il jar C:\Librerie\mylib.jar (org è una directory alla "radice" nel jar).
    La prima che trova è ok. Se non la trova ... ClassNotFoundException.

    Ecco perché c'è la regola fondamentale che i nomi dei package si devono sempre "riflettere" nella struttura delle cartelle. Il package org.prova si deve riflettere in un path org/prova trovabile da qualche parte lungo il classpath.

    Originariamente inviato da bobo24
    mentre se avete nuove idee per aiutarmi riguardo netbeans sono tutto orecchie (ricordo che il mio problema è che non riesco a creare package)...
    Ripeto che purtroppo non ho familiarità con NetBeans. Ma se nel progetto hai la "cartella" dei sorgenti e ci fai click con tasto destro dovresti quasi sicuramente trovare una voce "new" o forse "add" package o qualcosa di simile!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    123
    andbin sei stato chiarissimo...
    grazie grazie grazie e poi grazie

    poi non so se lavevi visto comunque appena sopra il tuo post avevo scritto che il problema con netbeans l'ho risolto e sempre grazie ai tuoi consigli (non riuscivo perchè non avevo letto con attenzione il tuo post precedente)

    ancora grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.