2009-01-13 8 views
0

Je désérialisation des données en utilisant XML simples en Java, mais je reçois une exception en me disant:exception inconnue lors de la désérialisation en utilisant XML simples

protokolsimulering.model.Terminal.<init>() 

Ceci est mon code de sérialisation:

public void saveSimulationState(String simulationFile) { 
    try{ 
     Strategy strategy = new CycleStrategy("id", "ref"); 
     Serializer serializer = new Persister(strategy); 
     File result = new File(simulationFile); 
     serializer.write(this.sm, result); 
    } 
    catch(Exception ex) 
    { 
     System.out.println(ex.getMessage()); 
    } 
} 

public void loadSimulationState(String simulationFile) { 
    try { 
     Strategy strategy = new CycleStrategy("id", "ref"); 
     Serializer serializer = new Persister(strategy); 
     File source = new File(simulationFile); 
     this.sm = serializer.read(Simulation.class, source); 
    } catch (Exception ex) { 
     System.out.println(ex.getLocalizedMessage()); 
    } 
} 

Le code pour Terminal.java est:

package protokolsimulering.model; 

import java.util.ArrayList; 
import protokolsimulering.model.DataPacket.*; 

public class Terminal extends Sensor { 

    public Terminal(int x, int y, double r) { 
     super(x,y,r); 
     learnPosition(); 
    } 

    @Override 
    public void init() { 
     this.broadcast(PacketFactory.newRutePacket(this,0)); 
    } 

    @Override 
    public void step() { 
     ArrayList<AbstractPacket> packetsThisStep = (ArrayList<AbstractPacket>) this.getPackages(); 

     for(AbstractPacket p : packetsThisStep) { 
      if(p instanceof HalloPacket) {  
       // Rutningsprotokol 
       send(p.getSender(),PacketFactory.newRutePacket(this,0)); 

       // Lokaliseringsprotokol 
       send(p.getSender(), PacketFactory.newHerPacket(this, this.getKnownPosition())); 
     } 
    } 
} 

}

Le code source complet peut être trouvé à l'adresse:

http://code.google.com/p/sensor-protocol-simulation/source/browse/#svn/trunk/src/protokolsimulering

+0

affichage de la stacktrace pourrait aider –

+0

Notez qu'il ne parvient pas à pas init() à savoir le problème est dans le constructeur –

+0

Le chemin de pile est: null protokolsimulering.model.Terminal. () debug: BUILD RÉUSSI (temps total: 17 secondes) Et le code est fait ce: catch (Exception ex) { System.out.println (ex.getCause()); System.out.println (ex.getLocalizedMessage()); } – utdiscant

Répondre

1

L'exception signifie que le problème est lié à appeler le constructeur du terminal.

En règle générale, pour construire des objets lorsque désérialisation, un doit être disponible, comme sans args contructor ceci:

public Terminal() { 
    ... 
} 
+0

Oui, alors que la question de l'OP est très vague et laisse de côté la plupart des informations utiles, il est clair que quelque chose cherche un constructeur sans argument pour Terminal. – erickson

+0

J'ai corrigé ceci en ajoutant un constructeur à Terminal, mais maintenant l'erreur semble être: protokolsimulering.model.DataPacket $ HalloPacket. () Ce que j'ai essayé de résoudre en utilisant la même méthode, seulement cela n'a pas fait l'affaire. – utdiscant

+0

Sans plus de détails, c'est difficile à dire, mais vous pouvez vous assurer que vous avez ajouté un constructeur vide à HalloPacket (l'erreur est sur une classe interne, pas sur DataPacket) –

Questions connexes