Visualizzazione dei risultati da 1 a 4 su 4

Discussione: serializzazione

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    86

    serializzazione

    Salve ho urgente bisogno di sapere come posso serializzare il mio proggetto
    Queste sono le classi
    codice:
    package mondo;
    import java.io.Serializable;
    
    import java.util.*;
    
    public class Stato implements  Serializable{
    	private static final long serialVersionUID = 1L;
    	public String nome;
    	public String capitale;
    	public long popolazione;
    	public double dimensione;
    	public HashSet<String> lingue = new HashSet<String>();
    	public HashSet<String> confini = new HashSet<String>();
    
    	public Stato(){
    		this.nome=new String();
    		this.capitale=new String();
    		this.popolazione=0L;
    		this.dimensione=0.0d;
    		this.lingue=new HashSet<String>();
    		this.confini=new HashSet<String>();
    		
    	}
    	
    	public String getNome() {
    		return nome;
    	}
    
    	public String getCapitale() {
    		return capitale;
    	}
    
    	public long getPopolazione() {
    		return popolazione;
    	}
    
    	public double getDimensione() {
    		return dimensione;
    	}
    
    	public HashSet<String> getConfini() {
    		return confini;
    	}
    
    	public void setNome(String n) {
    		nome = n;
    	}
    
    	public void setCapitale(String c) {
    		capitale = c;
    	}
    
    	public void setPopolazione(long p) {
    		popolazione = p;
    	}
    
    	public void setDimensione(double d) {
    		dimensione = d;
    	}
    
    	public void setLingue(String l) {
    		lingue.add(l);
    	}
    
    	public void setConfini(String c) {
    		confini.add(c);
    	}
    
    	public static Comparator<Stato> comparePop() {
    		return new Comparator<Stato>() {
    			public boolean equals(Object o) {
    				return false;
    			}
    
    			public int compare(Stato e1, Stato e2) {
    				return (int) (e1.popolazione - e2.popolazione);
    			}
    		};
    	}
    
    	public static Comparator<Stato> compareDim() {
    		return new Comparator<Stato>() {
    			public boolean equals(Object o) {
    				return false;
    			}
    
    			public int compare(Stato e1, Stato e2) {
    				return (int) (e1.dimensione - e2.dimensione);
    			}
    		};
    	}
    }
    codice:
    package mondo;
    
    
    import java.util.*;
    
    
    
    
    public class ElencoStati implements  Serializable{
    
    	private static final long serialVersionUID = 1L;
    
    	Vector<Stato> sta = new Vector<Stato>();
    	
    	public ElencoStati() {
    		super();  
    		this.sta=new Vector<Stato>();
    		
    	}
    	
    	public boolean Esiste(String c){
    		boolean t= false;
    		int cont=0;
    		while (cont< sta.size()) {
    			if (((Stato) sta.get(cont)).getNome().contains(c)) {
    				t = true;
    				break;
    			} else {
                  cont++;
    			}
    		}
    		return t;
    	}
    
    	
    
    	public String getCapitale(String c) {
    		String cap = new String();
    
    		if (!(sta.isEmpty())) {
    			int i = 0;
    			while (i < sta.size()) {
    				if ((((String) ((Stato) sta.get(i)).getNome())
    						.equalsIgnoreCase(c)))
    					cap = (((Stato) sta.get(i)).getCapitale());
    				if (i != sta.size())
    					i++;
    			}
    		}
    		return cap;
    	}
    
    	public long getPopolazione(String c) {
    		long pop = 0L;
    		if (!(sta.isEmpty())) {
    			int i = 0;
    			while (i < sta.size()) {
    				if ((((String) ((Stato) sta.get(i)).getNome())
    						.equalsIgnoreCase(c)))
    					pop = (((Stato) sta.get(i)).getPopolazione());
    				if (i != sta.size())
    					i++;
    			}
    		}
    		return pop;
    	}
    
    	public double getDimensione(String c) {
    		double dim = 0.0d;
    		if (!(sta.isEmpty())) {
    			int i = 0;
    			while (i < sta.size()) {
    				if ((((String) ((Stato) sta.get(i)).getNome())
    						.equalsIgnoreCase(c)))
    					dim = (((Stato) sta.get(i)).getDimensione());
    				if (i != sta.size())
    					i++;
    			}
    		}
    
    		return dim;
    	}
    
    	
    }

    codice:
    package mondo;
    
    
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.JOptionPane;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    
    public class Scelta extends JFrame {
    	private static final long serialVersionUID = 1L;
    
    	JLabel label = null;
    	JScrollBar vscroll = null;
    	JTextArea area = null;
    	JButton button1 = null;
    	JButton button2 = null;
    	JButton button3 = null;
    	JButton button4 = null;
    	JButton button5 = null;
    	JButton button6 = null;
    	JButton button7 = null;
    	JButton button8 = null;
    	JButton button9 = null;
    	JButton button10 = null;
    	JButton button11 = null;
    	JButton button12 = null;
    
    	ElencoStati el = new ElencoStati();
    	 Stato s=new Stato();
    	double dimensione = 0.0d;
    	long popolazione = 0L;
    
    	public Scelta() {
    		super("Mappa geografica");
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    
    		label = new JLabel("Clicca su uno dei bottoni");
    		button1 = new JButton("Aggiungi");
    		button2 = new JButton("Cerca capitale");
    		button3 = new JButton("Cerca popolazione");
    		button4 = new JButton("Cerca dimensione");
    		button5 = new JButton("Set confini");
    		button6 = new JButton("Carica Dati");
    		button7 = new JButton("Confinano?");
    		button8 = new JButton("Numero confini");
    		button9 = new JButton("Confinanti");
    		button10 = new JButton("Ordina per popolazione");
    		button11 = new JButton("Ordina per dimensione");
    		button12 = new JButton("Stampa elenco");
    		vscroll = new JScrollBar();
    		area = new JTextArea(30,10);
    
    		[B]button1.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				area.setText("");
    				String nome = JOptionPane.showInputDialog(null,
    						"Inserire il nome dello stato: ");
    				if (el.Esiste(nome) == false) {
    					String capitale = JOptionPane.showInputDialog(null,
    							"Inserire la capitale dello stato: ");
    					try {
    						popolazione = Long.parseLong(JOptionPane
    								.showInputDialog(null,
    										"Inserisci la popolazione: "));
    					} catch (NumberFormatException e2) {
    						JOptionPane.showMessageDialog(null,
    								"Valore non valido devi inserire un long");
    					}
    					try {
    						dimensione = Double.parseDouble(JOptionPane
    								.showInputDialog(null,
    										"Inserire la dimensione: "));
    					} catch (NumberFormatException e1) {
    						JOptionPane.showMessageDialog(null,
    								"Valore non valido devi inserire un double");
    					}
                       
    					Stato s = new Stato();
    					s.setNome(nome);
    					s.setCapitale(capitale);
    					s.setPopolazione(popolazione);
    					s.setDimensione(dimensione);
    					el.sta.add(s);
    
    				}
    
    				else
    					area.setText("Lo Stato " + nome + " è già presente");
    				
                              [B]
    			}
    		}
    
    		);
    		button2.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				area.setText("");
    				
    				String cercato = JOptionPane
    						.showInputDialog(null,
    								"Inserire il nome dello stato di cui si vuole conoscere la capitale: ");
    				
    					String n = el.getCapitale(cercato);
    					area.setText("La capitale e' : " + n);
    
    				} 
    			}
    		
    
    		);
    		button3.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				area.setText("");
    				String cercato1 = JOptionPane
    						.showInputDialog(null,
    								"Inserire il nome dello stato di cui si vuole conoscere la popolazione: ");
    				if (el.Esiste(cercato1)) {
    					long p = el.getPopolazione(cercato1);
    					area.setText("La popolazione e' : " + p);
    
    				} else
    					area.setText("Lo Stato " + cercato1 + " non è presente");
    			}
    		}
    
    		);
    		button4.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				area.setText("");
    				String cercato2 = JOptionPane
    						.showInputDialog(null,
    								"Inserire il nome dello stato di cui si vuole conoscere la dimensione: ");
    				if (el.Esiste(cercato2)) {
    					double d = el.getDimensione(cercato2);
    					area.setText("La dimensione e' : " + d);
    				} else
    					area.setText("Lo Stato " + cercato2 + " non è presente");
    			}
    		}
    
    		);
    		
    		
    		
    
    		JPanel panel1 = new JPanel();
    		panel1.setLayout(new GridLayout(6, 1));
    		panel1.add(button1);
    		panel1.add(button2);
    		panel1.add(button3);
    		panel1.add(button4);
    		panel1.add(button5);
    		panel1.add(button6);
    		JPanel panel2 = new JPanel();
    		panel2.setLayout(new GridLayout(6, 1));
    		panel2.add(button7);
    		panel2.add(button8);
    		panel2.add(button9);
    		panel2.add(button10);
    		panel2.add(button11);
    		panel2.add(button12);
    		JPanel panel3 = new JPanel();
    		panel3.setLayout(new GridLayout(1, 2));
    		panel3.add(area);
    		panel3.add(vscroll);
    		Container panel = getContentPane();
    		panel.setLayout(new BorderLayout());
    		panel.add(panel2, BorderLayout.EAST);
    		panel.add(panel1, BorderLayout.WEST);
    		panel.add(panel3, BorderLayout.CENTER);
    		panel.add(label, BorderLayout.NORTH);
    		addWindowListener(new WindowAdapter() {
    			public void windowClosing(WindowEvent e) {
    				System.exit(0);
    			}
    		});
    		pack();
    
    	}
    
    	public static void main(String[] args) {
    		Scelta app = new Scelta();
    		app.setVisible(true);
    
    	}
    }
    ho provato a mettere il seguente codice alla fine del blocco in grassetto ma niente:

    codice:
    try{
    			ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream("TestFile.dat"));
    			os.writeObject(el);
    			os.flush();
    			os.close();
    		}
    		catch(IOException e){
    			System.out.println("error writing to file");
    			System.exit(1);
    		}
    		/**
    		 * Legge il contenuto del file
    		 */
    		ElencoStati a;
    		try{
    			ObjectInputStream is=new ObjectInputStream(new FileInputStream("TestFile.dat"));
    			a=(ElencoStati)is.readObject();
    			is.close();
    			
    		}
    		catch(IOException ex){
    			System.out.println("file not found");
    			System.exit(1);
    		}
    		catch(ClassNotFoundException e1){
    			System.out.println("couldn't find class");
    			System.exit(5);
    		}
    Dov'è l'errore?

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    vorrei capire quale errore si presenta (io vedo solo codice) e soprattutto il punto in cui si presenta.
    Va bene fornire il codice, ma un aiuto in più potresti darlo (anche perché non tutti hanno il tempo/voglia di eseguire il tuo codice per capire se un errore c'è dove è e vedere se possono aiutarti o no)

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    86
    Si hai ragione scusami,l'errore che mi da è "error writing to file", in pratica mi lancia una IOException.


    Mi lanciava l'eccezione perchè non avevo inserito nella classe Elencostati implements Serializable e importato il package.Ma non funziona lo stesso cioè se faccio degli inserimenti
    e poi chiudo l'applicazione i dati inseriti prima non ci sono più.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quando hai l'eccezione, in fase di testing soprattutto, fai sempre

    e.printStackTrace();

    ti da info più precise sull'errore.

    Quando serializzi devi essere sicura che tutta la classe (tutto il suo contenuto) sia serializzabile

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.