Foros del Web » Programación para mayores de 30 ;) » Java »

problema con Serialización de JTree

Estas en el tema de problema con Serialización de JTree en el foro de Java en Foros del Web. Hola.. soy nuevo aqui... Pero bueno.. aqui va el problema que tengo, haber si pueden ayudarme Puedo serializar un TreeModel y deserializarlo, pero cuando relaciono ...
  #1 (permalink)  
Antiguo 10/03/2005, 17:34
 
Fecha de Ingreso: marzo-2005
Mensajes: 27
Antigüedad: 19 años, 1 mes
Puntos: 0
Pregunta problema con Serialización de JTree

Hola.. soy nuevo aqui...

Pero bueno.. aqui va el problema que tengo, haber si pueden ayudarme

Puedo serializar un TreeModel y deserializarlo, pero cuando relaciono objetos con cada nodo del TreeModel y lo quiero guardarlo en el archivo de serialización, estos no se guardan...

me refiero al UserObject de DefaultMutableTreeNode... esta declarado como "transient" y por eso no me permite serializar el UserObject...

la pregunta es que si se puede guardar todo el modelo junto con los objetos de usuario de alguna otra manera??

espero haberme explicado... y espero su ayuda... muchas gracias..
  #2 (permalink)  
Antiguo 10/03/2005, 17:38
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Para que un objeto pueda ser serializado este debe implementar la interfaz Serializable, si este objeto a la vez, tiene otros objetos guardados, para que todo funcione como se desea, cada uno de los objetos que estan siendo usados por el deben tambien implementar la interfaz Serializable, de lo contrario se serializa el objeto principal, peor no los que este maneje dentro, fijate bien en eso.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #3 (permalink)  
Antiguo 10/03/2005, 17:50
 
Fecha de Ingreso: marzo-2005
Mensajes: 27
Antigüedad: 19 años, 1 mes
Puntos: 0
Claro Gonzalo... efectivamente estoy implementando la interfaz Serializable en mi objecto de usuario, pero al querer deserializar me sale el siguiente error...

java.lang.IllegalArgumentException: path in TreePath must be non null

y la verdad no entiendo que pasa...

Muchas gracias... espero respuesta..
  #4 (permalink)  
Antiguo 10/03/2005, 17:58
Avatar de goncafa  
Fecha de Ingreso: julio-2002
Ubicación: Santiago
Mensajes: 1.211
Antigüedad: 21 años, 10 meses
Puntos: 10
Te esta reclamando por que el path en tu tree no puede ser nulo, si pudieses poner le codigo kiza seria mas facil saber que esta mal.

Saludos
__________________
se despide hasta la proxima
Gonzalo Castillo
  #5 (permalink)  
Antiguo 10/03/2005, 18:18
 
Fecha de Ingreso: marzo-2005
Mensajes: 27
Antigüedad: 19 años, 1 mes
Puntos: 0
Aqui esta el codigo... solamente es una prueba... no creas que es el programa en donde quiero implementarlo jajaja


import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;

public class TreeSave extends javax.swing.JFrame {

/** Creates new form TreeSave */
public TreeSave() {
initComponents();
jTree.getModel().addTreeModelListener(new TreeModelChangeEvent());
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
jTree = new javax.swing.JTree();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();

getContentPane().setLayout(null);

setDefaultCloseOperation(javax.swing.WindowConstan ts.DISPOSE_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});

jTree.setEditable(true);
getContentPane().add(jTree);
jTree.setBounds(20, 10, 220, 200);

jButton1.setText("Save");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

getContentPane().add(jButton1);
jButton1.setBounds(30, 250, 57, 23);

jButton2.setText("Load");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});

getContentPane().add(jButton2);
jButton2.setBounds(150, 250, 57, 23);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize ();
setBounds((screenSize.width-481)/2, (screenSize.height-441)/2, 481, 441);
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
try{
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C://Tree.stc"));
//TreeModel treeModel = jTree.getModel();

DefaultTreeModel loadedTreeModel = (DefaultTreeModel)ois.readObject();

jTree.setModel(loadedTreeModel);

ois.close();
}catch (IOException ioe){
System.out.println("error al cargar archivo "+ioe.getMessage());
}catch (ClassNotFoundException cnfe){
System.out.println("Clase no encontrada "+cnfe.getMessage());
}

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C://Tree.stc"));
DefaultMutableTreeNode root = ((DefaultMutableTreeNode)jTree.getModel().getRoot( ));

root.add(new DefaultMutableTreeNode(new Objeto("un objeto")));

((DefaultTreeModel)jTree.getModel()).reload();

oos.writeObject((DefaultTreeModel)jTree.getModel() );
oos.flush();
oos.close();
jTree.updateUI();

}catch(IOException ioe){
System.out.println("error al salvar archivo "+ioe.getMessage());
}
}

/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
new TreeSave().show();

}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JTree jTree;
// End of variables declaration


class Objeto implements Serializable{
public String Nombre;
public int Edad = 39;
public char sexo = 'm';

public Objeto(String Nombre){
this.Nombre = Nombre;
}
public String toString(){
return Nombre;
}
}
}
  #6 (permalink)  
Antiguo 11/03/2005, 16:31
Avatar de hugo777  
Fecha de Ingreso: enero-2002
Ubicación: Lima, Perú
Mensajes: 757
Antigüedad: 22 años, 3 meses
Puntos: 1
HOla, recuerda que cuando un objeto esta marcado como transient, siginifica que no puede ser serializado.

Hay objeto que por más que uno intente no pueden ser serialziados, caso de los objetos CORBA, u otros. Entonces para preveer algunos errores al no poder ser serializados, estos son marcados como transient por el estandar.
__________________
Saludos,

H@C..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:41.