Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1

    [java] problema runtime applicazione java

    Buongiorno a tutti voi!
    Ho una domanda da porvi.
    Nel mio lavoro di tesi sto costruendo una semplice applicazione che lavorerà in background. Scritto in maniera molto semplice, crea un array, inserisce alcune informazioni, stampa su file le informazioni memorizzate.

    Problema...a runtime mi da un errore, ho provato a fare diverse modifiche.....ma non sono riuscita a capire qual è il problema...qualcuno di voi mi può aiutare?

    Errore: Exception in thread "main" java.lang.NullPointerException
    at log.Array.getString(Array.java:14)
    at log.CreaFile.main(CreaFile.java:22)

    codice:
    package log;
     public class Array { 
    private static String[] lista; 
    public Array(){ 
    lista=new String [1000]; 
    } 
    public Array(String[] s){ 
    lista=s; 
    } 
    public static String getString(String[] l,int i){ 
    return l[i]; 
    } 
    public static String[] getLista(){ 
    return lista; 
    } 
    public void add(String a){ 
    int i=0; if (lista[i]!=null){ 
    lista[i]=a; 
    return; } 
    else { i++; 
    }
     } 
    }
    codice:
    package log; 
    public class CreaArray extends Array { 
    public static void main (String args[]){ 
    Array elenco= new Array(); 
    } 
    }
    codice:
    package log; 
    import java.util.Calendar; 
    import java.util.GregorianCalendar; 
    public class CollisioneSacco extends Array{ 
    public static void main (String args[]){ 
    String azione=new String("collisione tra macchina e sacco"); 
    Calendar calendar = new GregorianCalendar(); 
    int ore = calendar.get(Calendar.HOUR); 
    int minuti = calendar.get(Calendar.MINUTE); 
    int secondi = calendar.get(Calendar.SECOND); 
    int millisecondi= calendar.get(Calendar.MILLISECOND); 
    String ora=new String( "Ore:minuti:millisecondi " + ore + ":" + minuti + ":" + secondi + millisecondi); 
    String log=new String(azione+"="+ora); 
    String[] pippo=getLista(); 
    Array pluto=new Array(pippo); 
    pluto.add(log); } }
    codice:
    package log; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.PrintStream; 
    import java.util.Scanner; 
    public class CreaFile extends Array { 
    public static void main(String[] args){ 
    Scanner scanner=new Scanner(System.in); 
    System.out.println("inserire nome paziente"); 
    String nomeFile=scanner.next(); 
    String[] pippo=getLista(); 
    try { FileOutputStream file = new FileOutputStream("c:/"+nomeFile+".txt"); 
    PrintStream Output = new PrintStream(file);
     int i=0; while (getString(pippo,i)!=null) { 
    String s=getString(pippo,i); 
    Output.println(s); i++; } 
    } catch (IOException e) { 
    System.out.println("Errore: " + e); 
    System.exit(1); 
    } 
    }
     }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Magari nella sezione dedicata a Java....

    Sposto.

    ... e magari cercando anche di indentare un po' il codice... così davvero si fa fatica a leggerlo.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    ops......grazie!

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    La stringa passata in fase di inizializzazione

    codice:
    public Array(String[] s)
    e poi s viene assegnata a lista potrebbe essere nulla.

    Hai provato a controllare questo?
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ad ogni modo il codice ha ben poco senso:

    1) il campo "lista" della classe Array è statico, ma lo inizializzi solo all'interno del costruttore della classe stessa... i campi statici vanno inizializzati nei blocchi statici dato che i costruttori servono per istanziare un oggetto di quella classe e quindi ad inizializzare campi di istanza e non campi statici.

    2) Nella classe CreaFile (che estende, chissà perchè, Array) usi il metodo statico getLista() per ottenere una lista che, appunto per quanto detto sopra, non è mai stato inizializzato (non avendo MAI richiamato il costruttore della classe Array, ovvero non avendo MAI istanziato alcun oggetto di tale classe con new).

    Detto questo, ti mancano completamente le basi della programmazione OOP, quindi qualunque tentativo di "sistemare" quel codice sarebbe del tutto superfluo: il mio consiglio è di studiare prima i concetti fondamentali della programmazione Object Oriented.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da LeleFT
    Ad ogni modo il codice ha ben poco senso:

    1) il campo "lista" della classe Array è statico, ma lo inizializzi solo all'interno del costruttore della classe stessa... i campi statici vanno inizializzati nei blocchi statici dato che i costruttori servono per istanziare un oggetto di quella classe.

    2) Nella classe CreaFile (che estende, chissà perchè, Array) usi il metodo statico getLista() per ottenere una lista che, appunto per quanto detto sopra, non è mai stato inizializzato (non avendo MAI richiamato il costruttore della classe Array, ovvero non avendo MAI istanziato alcun oggetto di tale classe con new).

    Detto questo, ti mancano completamente le basi della programmazione OOP, quindi qualunque tentativo di "sistemare" quel codice sarebbe del tutto superfluo: il mio consiglio è di studiare prima i concetti fondamentali della programmazione Object Oriented.


    Ciao.
    Se sei stato perfido....
    In ogni caso concordo.

    Ma comprendi che un novita possa fare qualche semplice tentativo.

    Cmq segui il consiglio di LeLe
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  7. #7
    grazie mille per la tempestività delle risposte!
    sono consapevole di aver fatto un pasticcio, avevo originariamente scritto un codice non statico pulito e ordinato...ma poi per sistemar altri pasticci...ho pasticciato tutto .
    Cercherò di seguire i vostri suggerimenti...e se ne avete altri...fatelo pure...ora come ora...devo risolvere questo problema...non ho il tempo di impiegare mesi per ripetere la programmazione orientata agli oggetti...l'ho studiata tempo fa...e ora ho la necessità di far funzionare questo codice!

    Grazie ancora per quello che avete fatto e per quello che se vorrete farete ancora!

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ok, allora partiamo per gradi.
    Nessuna delle classi che hai creato deve estendere Array: se una classe B estende la classe A, significa che la classe B è una A, ma con qualcosa in più. La classe Cerchio è una Figura... ma non tutte le classi che manipolano le figure, sono a loro volta delle Figure.

    Le classi CreaArray, CollisioneSacco e CreaFile (parlando in termini di logica) non sono degli Array; piuttosto esse usano uno o più Array. Quindi non ha senso che esse estendano Array, ma va benissimo che la usino.

    Detto questo, tutto ciò che è statico nella classe Array, deve tornare (hai detto che all'inizio era così) ad essere non-statico ed il metodo getString() di quella classe dovrebbe prendere come parametro solamente la posizione dell'array che esso rappresenta da cui restituire il valore.

    Partendo da una base corretta, si vedrà poi come sistemare il resto. Credo, inoltre, che la classe CreaArray non sia poi così indispensabile: l'istanza della classe Array da usare nelle altre può essere tranquillamente creata altrove e passata tra le varie classi, ma qui dipende molto da ciò che realmente devi fare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Grazie!
    Praticamente correggendo queste cose torno a come lo avevo fatto inizialmente, e torno con i miei vecchi problemi, e cioè non riesco a prelevarmi l'array creato e a fare l'add.(avevo risolto questo problema rendendo statico tutto ed estendendo.... )

    Mi serve fare queste classi così perché verranno ad essere richiamate in alcuni punti di un mio videogioco. Inizialmente quindi ho bisogno ad un dato istante x di creare l'array e mi richiamo il jar opportuno. All'evento di apparizione o collisione dei sacchi parte il jar che mi crea il mio log e lo aggiunge nell'array, alla fine di tutto il medico inserisce il codice paziente e l'array viene "travasato" in un file.


    codice:
    public class Array { 
    private String[] lista; 
    public Array(){ 
    lista=new String [1000]; 
    } 
    public Array(String[] s){ 
    lista=s; 
    } 
    public String getString(int i){ 
    return lista[i]; 
    } 
    public String[] getLista(){ 
    return lista; 
    } 
    public void add(String a){ 
    int i=0; 
    if (lista[i]!=null){ 
    lista[i]=a; 
    return; 
    } else {
     i++; }
     } 
    }
    codice:
    public class CreaArray { 
    public static void main (String args[]){ 
    Array elenco= new Array(); 
    } 
    }
    codice:
    import java.util.Calendar; 
    import java.util.GregorianCalendar; 
    public class CollisioneSacco{ 
    public static void main (String args[]){ 
    String azione=new String("collisione tra macchina e sacco"); 
    Calendar calendar = new GregorianCalendar(); 
    int ore = calendar.get(Calendar.HOUR); 
    int minuti = calendar.get(Calendar.MINUTE); 
    int secondi = calendar.get(Calendar.SECOND); 
    int millisecondi= calendar.get(Calendar.MILLISECOND); 
    String ora=new String( "Ore:minuti:millisecondi " + ore + ":" + minuti + ":" + secondi + millisecondi); 
    String log=new String(azione+"="+ora); 
    String[] pippo=getLista();  //qui mi da errore
    Array pluto=new Array(pippo); 
    pluto.add(log); 
    }
     }

    codice:
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.PrintStream; 
    import java.util.Scanner; 
    public class CreaFile extends Array { 
    public static void main(String[] args){ 
    Scanner scanner=new Scanner(System.in); 
    System.out.println("inserire nome paziente"); 
    String nomeFile=scanner.next(); 
    String[] pippo=getLista();   //errore
    try { FileOutputStream file = new FileOutputStream("c:/"+nomeFile+".txt"); 
    PrintStream Output = new PrintStream(file); 
    int i=0; 
    while (getString(i)!=null) { //errore
    String s=getString(i);   //errore
    Output.println(s); i++; 
    } 
    } 
    catch (IOException e) { 
    System.out.println("Errore: " + e); 
    System.exit(1); 
    } 
    } 
    }
    per correggere gli errori....mi suggerisce di rendere statici i metodi

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ok, lascia perdere i suggerimenti dell'IDE: se le basi di Java non sono ben chiare, questi suggerimenti portano solo a peggiorare la situazione.

    (Reinvito anche ad indentare il codice)

    Cerca di spiegare, innanzitutto, perchè tutte queste classi hanno il metodo main(). Non che la cosa pregiudichi in qualche modo il funzionamento, ma all'interno di una applicazione, tendenzialmente, c'è una ed una sola classe con il metodo main(). Questo perchè l'applicazione parte da uno ed un solo punto, quindi da una ed una sola classe. Tutte le altre non dovrebbero avere un metodo main(), non essendo queste delle "entry-point" per l'avvio dell'applicazione.

    Poi procediamo per gradi.

    Dici che queste classe devono essere richiamate da diversi punti all'interno della tua applicazione: benissimo, ma questo non vuol dire che esse debbano avere un main, significa solo che esse devono essere "visibili" da altri punti dell'applicazione.

    Prendiamo, quindi, la classe CreaArray. Una classe con questo nome mi aspetto che venga istanziata una ed una sola volta e, successivamente, possa essere magari usata in più punti per accedere all'array che essa crea. Se così fosse, essa dovrebbe avere almeno un metodo che fornisca l'accesso all'array:

    codice:
    public class CreaArray {
       private Array mioArray;
    
       public CreaArray() {
          mioArray = new Array();
       }
    
       public Array getArray() { return mioArray; }
    }
    Ora, in qualunque punto tu voglia usare l'Array dovrai avere una di queste due cose:

    1) Un riferimento all'oggetto Array creato da tale classe

    oppure

    2) Un riferimento all'oggetto CreaArray da cui risalire all'oggetto Array.

    Quale delle due sia la migliore, dipende dalla tua implementazione.

    Una volta chiarite per bene queste cose, il resto è semplice da sistemare.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.