Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5

    Errore Salvataggio file

    Sto cercando di salvare su un file ma non riesco:
    ecco il codice nell'actionperformed del bottone salva:

    codice:
    	try {
    		mm.salvaPrenotazioni();
    	} catch (IOException e1) {
    	// TODO Auto-generated catch block
    	e1.printStackTrace();
    	}
    e questo è il codice nella classe model per salvare

    codice:
    public void salvaPrenotazioni() throws IOException{
    
    PrintStream ps = new PrintStream( new FileOutputStream("prenota.txt") );
    			
    			   ps.println(ff.getMatr().getText()+","ff.getPass().getText()+","ff.getfo().getItemListener();	 
    			   ps.close();
    	}
    mi da questo errore:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    alla riga dove salvo, come mai?

    per maggiore chiarezza :
    ff chiama la classe dove c'è la finestra di dialogo(al suo interno ci sono textfield e button salva)
    mm è la classe che contiene il model, cioè tutti i metodi.

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

    Re: Errore Salvataggio file

    Originariamente inviato da fleeaaa
    per maggiore chiarezza :
    ff chiama la classe dove c'è la finestra di dialogo(al suo interno ci sono textfield e button salva)
    mm è la classe che contiene il model, cioè tutti i metodi.
    Secondo me il punto è qui. ff potrebbe essere nullo (ma non lo sapremo mai perchè il codice che hai postato non è sufficiente a capirlo).

    Alcune considerazioni:

    1) Tieni separati i vari wrapper di scrittura su file
    2) Il trattamento delle eccezioni, fallo tutto nel metodo di salvataggio
    3) Usa la clausola finally per evitare di lasciare aperti i file in caso di eccezioni
    4) Usa il metodo flush() per assicurarti che la scrittura venga effettivamente fatta.

    Qui sotto è come dovrebbero essere fatte le cose per avere maggiori garanzie di corretta scrittura:

    codice:
    PrintStream ps = null;
    FileOutputStream fos = null;
    try {
       fos = new FileOutputStream("prenota.txt");
       ps = new PrintStream( fos );
    
       ps.println(ff.getMatr().getText()+","ff.getPass().getText()+","ff.getfo().getItemListener();
       ps.flush();
    } catch (Exception e) {
       e.printStackTrace();
    } finally {
       if (ps != null) {
          try { ps.close(); } catch (Exception e) { }
       } else {
          if (fos != null) {
             try { fos.close(); } catch (Exception e) { }
          }
       }
    }
    I due oggetti (PrintStream e FileOutputStream) vengono creati separatamente, così hai un maggiore controllo nell'eventuale caso di eccezione in crerazione di uno dei due.
    All'interno del blocco try viene fatta la scrittura e il flush. La chiusura degli stream viene relegata al blocco finally, così essa viene garantita anche in caso di eccezione.

    PS: usa i tag CODE per il codice, come ho fatto io per mantenere indentazione e formattazione.
    "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
    Utente di HTML.it
    Registrato dal
    Dec 2012
    Messaggi
    5

    Re: Re: Errore Salvataggio file

    Originariamente inviato da LeleFT
    Secondo me il punto è qui. ff potrebbe essere nullo (ma non lo sapremo mai perchè il codice che hai postato non è sufficiente a capirlo).

    Alcune considerazioni:

    1) Tieni separati i vari wrapper di scrittura su file
    2) Il trattamento delle eccezioni, fallo tutto nel metodo di salvataggio
    3) Usa la clausola finally per evitare di lasciare aperti i file in caso di eccezioni
    4) Usa il metodo flush() per assicurarti che la scrittura venga effettivamente fatta.

    Qui sotto è come dovrebbero essere fatte le cose per avere maggiori garanzie di corretta scrittura:

    codice:
    PrintStream ps = null;
    FileOutputStream fos = null;
    try {
       fos = new FileOutputStream("prenota.txt");
       ps = new PrintStream( fos );
    
       ps.println(ff.getMatr().getText()+","ff.getPass().getText()+","ff.getfo().getItemListener();
       ps.flush();
    } catch (Exception e) {
       e.printStackTrace();
    } finally {
       if (ps != null) {
          try { ps.close(); } catch (Exception e) { }
       } else {
          if (fos != null) {
             try { fos.close(); } catch (Exception e) { }
          }
       }
    }
    I due oggetti (PrintStream e FileOutputStream) vengono creati separatamente, così hai un maggiore controllo nell'eventuale caso di eccezione in crerazione di uno dei due.
    All'interno del blocco try viene fatta la scrittura e il flush. La chiusura degli stream viene relegata al blocco finally, così essa viene garantita anche in caso di eccezione.

    PS: usa i tag CODE per il codice, come ho fatto io per mantenere indentazione e formattazione.

    Grazie! volevo chiedere un'altra cosa collegata a questa. Sto cercando di salvare delle parole in un file a seconda di un altro file e della jtextfield.
    In pratica se io scrivo una parola che è già presente in un file la JLabel mi deve segnalare che non posso salvare, altrimenti si: posto il codice.
    public boolean c2(){

    for(int i=0; i<mm.getPrenotazioni(); i++){
    if(mm.getPrenotato(i).getMatr().equalsIgnoreCase(m atr.getText())){
    //System.out.println(mm.getPrenotato(i).getMatr());
    errore.setText("registrazione già effettuata");
    return true;
    }
    }
    return false;
    Se la condizione è vera, cioè se la parola scritta nella textfield è contenuta nel file allora non posso salvare il file. Il problema è che facendo così mi controlla solo la prima parola del file, non riesco a capire perchè. Come posso risolvere?

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

    Moderazione

    Questo è un problema completamente diverso dal primo, quindi richiede una discussione separata.

    Apri, quindi, una nuova discussione, riportando tutti i dettagli del nuovo problema, scrivendo il codice all'interno dei tag CODE (come ti avevo già chiesto di fare) e spiegando per bene cosa sono quelle classi che usi, cosa contengono e come funzionano (dettagli necessari per capire se stai andando nella giusta direzione oppure no).


    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.