Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Stesso file .java funziona su IDE ma non da prompt

    Salve,
    qualche mese fa ho realizzato, a scopo didattico, un programma in Java con NetBeans, che tutt'ora funziona.
    Oggi ho provato a eseguirlo da prompt e mi dà problemi: facendone una copia e provandolo a ricompilare con javac mi dà due note secondo cui sto usando "unchecked or unsafe operations" e di ricompilare con "-Xlint:unchecked for details".
    Genera comunque il file .class ma eseguendolo dice che non trova la classe principale, quella omonima al file .java.
    L'errore l'ho anche se cerco di ricompilare ed eseguire il file originale da prompt.

  2. #2
    Ho rieseguito javac aggiungendo -Xlint:unchecked ottenendo in risposta questa roba qua...
    codice:
    Note: RadiciNdiC.java uses unchecked or unsafe operations.Note: Recompile with -Xlint:unchecked for details.
    
    
    G:\Lavoro e Universita\Java\radicindic>javac RadiciNdiC.java -Xlint:unchecked
    RadiciNdiC.java:78: warning: [unchecked] unchecked call to add(E) as a member of
     the raw type ArrayList
                    soluzioniR.add(anscosgdouble);
                                  ^
      where E is a type-variable:
        E extends Object declared in class ArrayList
    RadiciNdiC.java:79: warning: [unchecked] unchecked call to add(E) as a member of
     the raw type ArrayList
                    soluzioniI.add(anssingdouble);
                                  ^
      where E is a type-variable:
        E extends Object declared in class ArrayList
    RadiciNdiC.java:90: warning: [unchecked] unchecked method invocation: method max
     in class Collections is applied to given types
                Object objR = Collections.max(soluzioniR);
                                             ^
      required: Collection<? extends T>
      found: ArrayList
      where T is a type-variable:
        T extends Object,Comparable<? super T> declared in method <T>max(Collection<
    ? extends T>)
    RadiciNdiC.java:90: warning: [unchecked] unchecked conversion
                Object objR = Collections.max(soluzioniR);
                                              ^
      required: Collection<? extends T>
      found:    ArrayList
      where T is a type-variable:
        T extends Object,Comparable<? super T> declared in method <T>max(Collection<
    ? extends T>)
    RadiciNdiC.java:91: warning: [unchecked] unchecked method invocation: method max
     in class Collections is applied to given types
                Object objI = Collections.max(soluzioniI);
                                             ^
      required: Collection<? extends T>
      found: ArrayList
      where T is a type-variable:
        T extends Object,Comparable<? super T> declared in method <T>max(Collection<
    ? extends T>)
    RadiciNdiC.java:91: warning: [unchecked] unchecked conversion
                Object objI = Collections.max(soluzioniI);
                                              ^
      required: Collection<? extends T>
      found:    ArrayList
      where T is a type-variable:
        T extends Object,Comparable<? super T> declared in method <T>max(Collection<
    ? extends T>)
    6 warnings
    Potrei capire che ci potrebbero essere errori di codice, ma sia l'IDE che il prompt fanno capo alla stessa JVM, e l'IDE esegue regolarmente tutto.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    codice:
    G:\Lavoro e Universita\Java\radicindic>javac RadiciNdiC.java -Xlint:unchecked
    RadiciNdiC.java:78: warning: [unchecked] unchecked call to add(E) as a member of
     the raw type ArrayList
                    soluzioniR.add(anscosgdouble);
                                  ^
      where E is a type-variable:
        E extends Object declared in class ArrayList
    Questi sono warning (quindi non errori "bloccanti") tipicamente legati al mancato (o non buon) uso dei generics. E infatti te lo dice: the raw type ArrayList

    Il "raw" type è un tipo "generico" usato non parametrizzato. In sostanza stai usando un ArrayList senza averlo parametrizzato.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    l'IDE esegue regolarmente tutto.
    Sì ma l'IDE i warning dovrebbe comunque elencarteli (se non hai smanettato nelle configurazioni per sopprimerli globalmente/per progetto).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Netbeans mi segnala due warning, ma non relativamente agli ArrayList, piuttosto sono suggerimenti per cambiare l'exception e la modalità di scrittura del PrintWriter...

    Ho cercato in rete trovando che bisogna dichiarare e inizializzare gli ArrayList indicando il reference al tipo contenuto. Se scrivo così:
    codice:
    ArrayList<Double> soluzioniR = new ArrayList<Double>();
    javac compila senza segnalare nulla ma in esecuzione la virtual machine continua a non trovare la classe principale.

    Resto basito del fatto che un linguaggio avente come punto di forza la portabilità multipiattaforma compili o non compili lo stesso codice a seconda se si usa un IDE o la riga di comando.
    Ultima modifica di Gas75; 06-05-2017 a 19:52

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    ma in esecuzione la virtual machine continua a non trovare la classe principale.
    Qui è solo questione di vedere cosa stai avviando, come e da dove.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Resto basito del fatto che un linguaggio avente come punto di forza la portabilità multipiattaforma compili o non compili lo stesso codice a seconda se si usa un IDE o la riga di comando.
    Non c'è bisogno di prendersela con la portabilità o altro. Usare direttamente i tools del JDK è chiaramente diverso dall'usare un IDE. Eclipse ad esempio ha il suo compilatore java interno e normalmente compila con quello. Inoltre gli IDE in generale (che usino il compilatore del JDK o no) possono comunque avere settings preconfigurati e/o impostabili riguardo come trattare errori e warning.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Qui è solo questione di vedere cosa stai avviando, come e da dove.
    Il mio file .java ha una sola classe, quella omonima del file stesso, non c'è molto da decidere cosa avviare: javac genera un unico file .class; l'unica differenza tra NetBeans e prompt è che l'IDE posiziona i .class in una cartella dedicata diversa da quella del .java.
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non c'è bisogno di prendersela con la portabilità o altro. Usare direttamente i tools del JDK è chiaramente diverso dall'usare un IDE. Eclipse ad esempio ha il suo compilatore java interno e normalmente compila con quello. Inoltre gli IDE in generale (che usino il compilatore del JDK o no) possono comunque avere settings preconfigurati e/o impostabili riguardo come trattare errori e warning.
    In NetBeans è impostato il path del JDK da usare, che è il medesimo che ho indicato come variabile d'ambiente in Windows per invocare i comandi Java da prompt.
    I warning li ho sempre lasciati come preimpostati... Che eventualmente l'IDE non li visualizzi tutti è un conto, ma forse il problema è un altro: il .class di un .java generato da NetBeans sembrerebbe diverso dal .class dello stesso .java generato col comando javac, il che contrasta non poco con la filosofia della portabilità.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Il mio file .java ha una sola classe, quella omonima del file stesso, non c'è molto da decidere cosa avviare: javac genera un unico file .class;
    Se non ha neanche la dichiarazione di package, allora è pure più semplice:

    javac NomeClasse.java

    java NomeClasse

    (ammesso che non ci siano grane sulla configurazione del CLASSPATH, che ovviamente non posso sapere cosa hai)

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    è che l'IDE posiziona i .class in una cartella dedicata diversa da quella del .java.
    Sì, gli IDE di norma tengono ben separati i sorgenti dai file generati. E per buone/ovvie ragioni.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    il .class di un .java generato da NetBeans sembrerebbe diverso dal .class dello stesso .java generato col comando javac
    Lo dici in base a cosa?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    Invece il package c'era... Appena l'ho commentato, il nuovo compilato ha funzionato perfettamente, ferme restando le correzioni circa gli ArrayList segnalati in precedenza.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Invece il package c'era...
    La regola fondamentale: i nomi di package devono sempre "riflettersi" nella struttura delle cartelle.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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 © 2024 vBulletin Solutions, Inc. All rights reserved.