Errore Java Exception in thread...

di Anonimizzato24707 il
14 risposte
Salve, ho creato questo codice

import prog.io.ConsoleOutputManager;

public class NomeEstensione {
public static void main(String[] args) {
ConsoleOutputManager out = new ConsoleOutputManager();

String s = args[0];
int punto = s.indexOf(".");

String nome = s.substring(0, punto);
String estensione = s.substring(punto+1, s.length());

out.println("nome: " + nome);
out.println("estensione: " + estensione);

}
}

Ma mi da questo errore..Ho letto che avviene perchè il codice tenta di raggiungere un indice di matrice in cui l'indice è maggiore della lunghezza della matrice. Ma non riesco a risolvere

14 Risposte

  • Padova ha scritto:


    Ma mi da questo errore..
    Quale errore.

    Padova ha scritto:


    Ho letto che avviene perchè il codice tenta di raggiungere un indice di matrice in cui l'indice è maggiore della lunghezza della matrice. Ma non riesco a risolvere
    Beh, indexOf restituisce -1 se NON trova quel ".". E un substring(0, -1) è un errore (StringIndexOutOfBoundsException).
    Ma vuol dire che devi testare tu il valore di punto. Se diverso da -1, ok. Se -1 ... non so cosa vuoi fare, stampi errore, termini ..


    P.S. cerca di mettere titoli significativi, non "Help".
  • Hai ragione, scusami, mi da questo errore:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
  • Padova ha scritto:


    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    Allora il problema è ancora prima del indexOf. Quando avvii il tuo programmino devi passare in argomento un parametro che sarà preso con quel args[0] .

    Dipende come avvii il programmino: "a mano" da un prompt dei comandi? Da un IDE?
  • Prompt con comando javac
  • Padova ha scritto:


    Prompt con comando javac
    Compilazione

    javac NomeEstensione.java

    Avvio

    java NomeEstensione argomento
  • Sei gentile e non vorrei rompere...Ma mi da sempre errore
  • Padova ha scritto:


    Sei gentile e non vorrei rompere...Ma mi da sempre errore
    Sì, scusa, prima ho risposto velocemente da smartphone e non ci ho pensato molto. Nel codice hai usato quella ConsoleOutputManager, che NON fa parte del framework standard. Quindi devi avere da qualche parte o un file .jar che contiene quella classe (più altro eventuale, non so) oppure i file .class "sfusi" sul file-system.

    Precisa questo, cioè cosa hai ricevuto/scaricato di quella mini-libreria del package prog.io . Perché le due esecuzioni con javac/java possono avere una opzione in più per specificare il "classpath". O in alternativa puoi settare la variabile di ambiente del sistema chiamata CLASSPATH.
  • Allora, ho scarico il pacchetto prog-4ed.jar. Poi ho creato due cartelle in c, una javalib ed una jarlib. In jarlib ho inserito il jar così com'è, in javalib invece ho inserito il pacchetto jar l'ho estratto e lasciato dentro le cartelle con i file. Poi in variabili nel path ho messo

    CLASSPATH=.;C:\javalib;C:\jarlib\prog-4ed.jar
  • Padova ha scritto:


    in javalib invece ho inserito il pacchetto jar l'ho estratto e lasciato dentro le cartelle con i file.
    Se hai scompattato il jar, nulla di grave ma .. non serve.

    Padova ha scritto:


    CLASSPATH=.;C:\javalib;C:\jarlib\prog-4ed.jar
    Visto così comunque è corretto. Quindi basta stare come directory "corrente" (grazie al ".") nella directory dove hai NomeEstensione.java e dare i 2 comandi che ho detto prima.
  • Allora, io creo quindi la cartella dove metto il file.java in c, poi apro il command ed arrivo nella cartella dei file che si chiama prova 2, poi javac NomeEstensione.java

    java NomeEstensione argomento

    giusto?
  • Padova ha scritto:


    Allora, io creo quindi la cartella dove metto il file.java in c, poi apro il command ed arrivo nella cartella dei file che si chiama prova 2, poi javac NomeEstensione.java

    java NomeEstensione argomento

    giusto?
    Sì, avendo "." (=directory "corrente") in classpath, metti NomeEstensione.java dove vuoi e stando da prompt in quella cartella dai i 2 comandi.
  • Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1967)
    at NomeEstensione.main(NomeEstensione.java:10)
  • Padova ha scritto:


    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    Scusa ma l'ho detto prima: il codice si aspetta 1 argomento che contiene un punto ".". Se non metti un punto, indexOf restituisce -1 e passare -1 a substring è quel errore.

    Nel codice si parla di "nome" e "estensione", quindi si immagina un nome di file es.: pippo.txt
  • Perfetto, ora mettendo java NomeEstensione argomento.argomento poi mi da Nome: argomento estensione: argomento. Qualsiasi cosa scrivo poi me lo fa vedere. Il problema era quindi che non davo nulla a video. Davvero grazie, grazie e grazie!
Devi accedere o registrarti per scrivere nel forum
14 risposte