| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | Problemer med parsing af XML fil. Fra : memborg | 
  Dato :  24-07-04 09:24 |  
  |   
            Hejsa...
 
 Jeg har prøvet på at lave en parser til min cykel.xml, men jeg får en
 nullpointer exception når jeg type convertere en String til Int.
 Hele koden er vedhæftet for nemheds skyld. :)
 
 Kode:
 ....
 
 public void characters(char[] ch, int start, int length) throws SAXException
    {
       if(TnavnTest == "Tnavn")
       {
          String s = new String(ch, start, length);
          Tnavn = s;
       }
       if(TaarTest == "Taar")
       {
          String s = new String(ch, start, length);
          Taar = s;
       }
       if(TdistanceTest == "Tdistance")
       {
          String s = new String(ch, start, length);
          Tdistance = s;
       }
       addTour(tourID,Tnavn,Taar,Tdistance); //Jeg er ret sikker pÃ¥ at det er
 her fejlen opstår.
    }
    
    public void addTour(String id, String navn, String aar, String distance)
    {
       cm.addTour(Integer.parseInt(id),navn,aar,Integer.parseInt(distance));
    }
 ....
 
 Som i kan se tror jeg fejlen sker efter addTour metoden er udført og den
 skal til hente det næste element i XML filen.
 Jeg kan ikke lige finde ud af hvordan jeg undgår denne fejl uden at
 skulle skrive hele mit program om, så alt er gemt som Strings, men det
 er mega besværligt når man skal regne med nogle af variablerne :(
 
 Håber en kan løse dette ellers er der ikke nogen vej uden om.
 
 MVH Memborg
 
 PS. Hvis i vil have resten af koden, så sig lige til.
 
 
 
  
            
             |   |   
            
        
 
            
         
           Flemming Mertz (24-07-2004) 
         
	
            | Kommentar Fra : Flemming Mertz | 
  Dato :  24-07-04 09:52 |  
  |   
            Hej!
 
 Hmm, mangler der ikke noget? Du skriver at hele koden er med, men der er en
 reference til en CykelMain variabel i MyXMLReader, som jeg ikke kan finde?
 
 Anyway, prøv at skrive tourID, Tnavn, Taar og Tdistance ud, lige inden du
 kalder
 addTour(tourID,Tnavn,Taar,Tdistance);
 Enten med System.out.println() eller ved at kigge i variablene, hvis du har
 et IDE med debugger.
 
 Måden du konverterer en streng til et heltal ser fin nok ud, afhængigt af om
 du vil have en Integer eller en int ud af det. Men det er jo heller ikke det
 du får en fejl på. En null pointer excetion betyder jo at der er en variabel
 der ikke indeholder noger, når du prøver at tilgå den. Hvis det ikke giver
 dig svaret, når du udskriver indholdet af variablerne som beskrevet
 overnfor, så prøv at poste den stacktrace der kommer når dit program fejler.
 
 Med venlig hilsen,
 Flemming Mertz
 
 
  
            
             |   |   
            
        
 
            
         
           Konstantin Barkaia (24-07-2004) 
         
	
            | Kommentar Fra : Konstantin Barkaia | 
  Dato :  24-07-04 19:31 |  
  |   
            Hejsa.
 
 Jeg ved ikke om mit indlæg kommer til at løse dit problem, men fordi 
 String er et objekt og ikke en simpel/primitiv type er det en ret dårlig 
 ide at bruge == operatoren. Brug istedet for String.equals().
 > 
 > public void characters(char[] ch, int start, int length) throws 
 > SAXException
 >     {
 >         if(TnavnTest == "Tnavn")
 Alså:
      if(TnavnTest.equals("Tnavn"))
 
 >         {
 >             String s = new String(ch, start, length);
 >             Tnavn = s;
 >         }
 >         if(TaarTest == "Taar")
 >         {
 >             String s = new String(ch, start, length);
 >             Taar = s;
 >         }
 >         if(TdistanceTest == "Tdistance")
 >         {
 >             String s = new String(ch, start, length);
 >             Tdistance = s;
 >         }
 >         addTour(tourID,Tnavn,Taar,Tdistance); //Jeg er ret sikker på at 
 > det er
 > her fejlen opstår.
 >     }
 >     
 >     public void addTour(String id, String navn, String aar, String 
 > distance)
 >     {
 >         
 > cm.addTour(Integer.parseInt(id),navn,aar,Integer.parseInt(distance));
 >     }
 > ...
 > 
 > Som i kan se tror jeg fejlen sker efter addTour metoden er udført og den
 > skal til hente det næste element i XML filen.
 > Jeg kan ikke lige finde ud af hvordan jeg undgår denne fejl uden at
 > skulle skrive hele mit program om, så alt er gemt som Strings, men det
 > er mega besværligt når man skal regne med nogle af variablerne :(
 > 
 > Håber en kan løse dette ellers er der ikke nogen vej uden om.
 > 
 > MVH Memborg
 > 
 > PS. Hvis i vil have resten af koden, så sig lige til.
 > 
 > 
 > ------------------------------------------------------------------------
 > 
 > import java.io.IOException;
 > import java.util.HashMap;
 > import java.util.Iterator;
 > import org.xml.sax.Attributes;
 > import org.xml.sax.ContentHandler;
 > import org.xml.sax.ErrorHandler;
 > import org.xml.sax.InputSource;
 > import org.xml.sax.Locator;
 > import org.xml.sax.Parser;
 > import org.xml.sax.SAXException;
 > import org.xml.sax.SAXParseException;
 > import org.xml.sax.XMLReader;
 > import org.xml.sax.helpers.XMLReaderFactory;
 > 
 > public class MyXMLReader {
 > 
 >    private String vendorParserClass = "org.apache.xerces.parsers.SAXParser";
 >    
 >    public MyXMLReader()
 >    {}
 >    
 >    public void scanXML(String xmlURI) throws IOException, SAXException
 >    {
 >       XMLReader reader = XMLReaderFactory.createXMLReader(vendorParserClass);
 >       
 >       ContentHandler MyContentHandler = new MyContentHandler();
 >       
 >       //Register content handler
 >       reader.setContentHandler(MyContentHandler);
 >       //Register Error Handler
 >       
 >       //Parse
 >       InputSource inputsource = new InputSource(xmlURI);
 >       reader.parse(inputsource);
 >    }
 >    
 > }
 > 
 > class MyContentHandler implements ContentHandler
 > {
 >    private Locator locator;
 >    private CykelMain cm;
 >    
 >    //Tour variabler
 >    private String tourID;
 >    private String Tnavn;
 >    private String TnavnTest;
 >    private String Taar;
 >    private String TaarTest;
 >    private String Tdistance;
 >    private String TdistanceTest;
 >    
 >    //Rytter Variabler
 >    private String Dantal;
 >    private String DID;
 >    private String Dnavn;
 >    private String Dadresse;
 >    private String Dpostnr;
 >    private String Dby;
 >    private String Dtlf;
 >    private String Drytternr;
 >    private String DsponsorID;
 >    private String DSkrprkm;
 >    private String DSfastkr;
 >    
 >    //Sponsor Variabler
 >    private String Santal;
 >    private String SID;
 >    private String Snavn;
 >    private String Sadrsse;
 >    private String Spostnr;
 >    private String Sby;
 >    private String Stlf;
 >    
 >    
 >    //private Map namespaceMappings;
 >    
 >    public MyContentHandler(){}
 >    
 >    //ContentHandler method implementations
 >    public void setDocumentLocator(Locator locator)
 >    {
 >       this.locator = locator;
 >    }
 >    
 >    public void startDocument() throws SAXException
 >    {
 >          
 >    }
 >    
 >    public void endDocument() throws SAXException
 >    {
 >       
 >    }
 >    
 >    public void startElement(String namespaceURI, String localeName, String qName, Attributes atts) throws SAXException
 >    {
 >       System.out.println(localeName);
 >       
 >       if(localeName == "tour")
 >       {
 >          //Henter attributter
 >          for(int i=0; i<atts.getLength(); i++)
 >          {
 >             //System.out.println(atts.getLocalName(i));
 >             System.out.println(atts.getValue(i));
 >             
 >             tourID = atts.getValue(i);
 >          }
 >       }
 >       
 >       if(localeName == "Tnavn")
 >       {
 >          TnavnTest = localeName;
 >       }
 >       if(localeName == "Taar")
 >       {
 >          TaarTest = localeName;
 >       }
 >       if(localeName == "Tdistance")
 >       {
 >          TdistanceTest = localeName;
 >       }
 >    }
 >    
 >    public void characters(char[] ch, int start, int length) throws SAXException
 >    {
 >       if(TnavnTest == "Tnavn")
 >       {
 >          String s = new String(ch, start, length);
 >          Tnavn = s;
 >       }
 >       if(TaarTest == "Taar")
 >       {
 >          String s = new String(ch, start, length);
 >          Taar = s;
 >       }
 >       if(TdistanceTest == "Tdistance")
 >       {
 >          String s = new String(ch, start, length);
 >          Tdistance = s;
 >       }
 >       addTour(tourID,Tnavn,Taar,Tdistance);
 >    }
 >    
 >    public void addTour(String id, String navn, String aar, String distance)
 >    {
 >       cm.addTour(Integer.parseInt(id),navn,aar,Integer.parseInt(distance));
 >    }
 >    
 >    public void skippedEntity(String name) throws SAXException{}
 >    
 >    public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException{}
 >    
 >    public void endElement(String namespaceURI, String localeName, String qName) throws SAXException{}
 >    
 >    public void startPrefixMapping(String prefix, String uri){}
 >    
 >    public void endPrefixMapping(String prefix){}
 >    
 >    public void processingInstruction(String target, String data) throws SAXException{}
 > }
 > 
 > 
 > ------------------------------------------------------------------------
 > 
 > /*
 >  * Created on 21-07-2004
 >  *
 >  * TODO To change the template for this generated file go to
 >  * Window - Preferences - Java - Code Style - Code Templates
 >  */
 > 
 > /**
 >  * @author rune
 >  *
 >  * TODO To change the template for this generated type comment go to
 >  * Window - Preferences - Java - Code Style - Code Templates
 >  */
 > public class TestKlasse {
 > 
 >    public static void main(String[] args)
 >    {
 >       try{
 >          MyXMLReader reader = new MyXMLReader();
 >          reader.scanXML(args[0]);
 >       }
 >       catch(Exception e)
 >       {e.printStackTrace();}
 >    }
 > }
 > 
 > 
 > 
 > ------------------------------------------------------------------------
 > 
 > <?xml version="1.0" encoding="UTF-8"?>
 > <cykel>
 > <tour id="0">
 > <Tnavn>TEST TOUR</Tnavn>
 > <Taar>1999</Taar>
 > <Tdistance>4500</Tdistance>
 > <deltager antal="0">
 >    <Dperson id="0">
 >       <Dnavn></Dnavn>
 >       <Dadresse></Dadresse>
 >       <Dpostnr></Dpostnr>
 >       <Dby></Dby>
 >       <Dtlf></Dtlf>
 >       <Dvoksen></Dvoksen>
 >       <Drytternr></Drytternr>
 >       <Dsponsorid id="0">
 >          <DSkrprkm></DSkrprkm>
 >          <DSfastkr></DSfastkr>
 >       </Dsponsorid>   
 >    </Dperson>
 > </deltager>
 > <sponsor antal="0">
 >    <Soplysning id="0">
 >             <Sponsornavn></Sponsornavn>
 >             <Sadresse></Sadresse>
 >             <Spostnr></Spostnr>
 >             <Sby></Sby>
 >             <Stlf></Stlf>
 >         </Soplysning>
 > </sponsor>
 > </tour>
 > </cykel>
 > 
  
            
             |   |   
            
        
 
            
         
           Peter Kjellerup Rasm~ (24-07-2004) 
         
	
            | Kommentar Fra : Peter Kjellerup Rasm~ | 
  Dato :  24-07-04 21:17 |  
  |   
            Konstantin Barkaia wrote:
 > Hejsa.
 > 
 > Jeg ved ikke om mit indlæg kommer til at løse dit problem, men fordi 
 > String er et objekt og ikke en simpel/primitiv type er det en ret dårlig 
 > ide at bruge == operatoren. Brug istedet for String.equals().
 Og lidt mere uddybende er det fordi == sammenligner de to objekter og 
 ikke indholdet. Objekterne er normalt forskellige selvom den tekst de 
 indeholder er forskellige.
 Eksempel:
      public static void main(String[] args) {
          String test1 = new String("string");
          String test2 = new String("string");
 
          if (test1 == test2) {
              System.err.println("Objekterne er ens!");
          }                                    else {
              System.err.println("Objemterne er _ikke_ ens!");
          }
          if (test1.equals(test2)) {
              System.err.println("Stringene er ens!");
          }                                    else {
              System.err.println("Stringene er _ikke_ ens!");
          }
      }
 
 >> Som i kan se tror jeg fejlen sker efter addTour metoden er udført og den
 >> skal til hente det næste element i XML filen.
 Det der tilsyneladende er problemet er, at parseInt forventer at den 
 string den får med som argument er valid. Hvis den ikke er det (det kan 
 være at den er null, eller hvis den indeholder andet end tal) så smider 
 den en exception.
 
 Prøv at udskrive værdien af den string du vil konvertere lige inden du 
 konverterer. SÃ¥ vil du nok kunne se hvad der er galt.
 
 Ellers så prøv med nogle flere udskrifter af hvad der kommer af outputs 
 fra dit program og post dem her.
 
 mvh
 Peter
  
            
             |   |   
            
        
 
            
         
            Memborg (09-08-2004) 
         
	
            | Kommentar Fra : Memborg | 
  Dato :  09-08-04 22:30 |  
  |   
            
 Undskyld jeg ikke svare før nu, men mit news program har drillet og ville
 ikke poste indlæg. Har installeret et nyt.
 
 Først vil jeg sige tak for jeres forslag. Det er nogle gode forslag :)
 Jeg løst nogle af fejlene. Istedet for at gemme direkte i en variable har
 jeg lagt hver enkelt element fra f.eks tour i en String tabel også sat
 hver enkelt variable tom. Jeg kan godt se hvad du mener med "==" ikke
 tester korrekt, men indtil videre virker det.
 
 Ved lagt kode:
 
 public void characters(char[] ch, int start, int length) throws SAXException
    {
       String s = new String(ch, start, length);
          if(TnavnTest == "Tnavn")
          {
             //String s = new String(ch, start, length);
             Tnavn = s;
             System.out.println("Tnavn: "+Tnavn);
             tourTabel[1]=Tnavn;
          }
          TnavnTest = null;
          if(TaarTest == "Taar")
          {
             //String s = new String(ch, start, length);
             Taar = s;
             System.out.println("Taar: "+Taar);
             tourTabel[2]=Taar;
          }
          TaarTest= null;
          if(TdistanceTest == "Tdistance")
          {
             //String s = new String(ch, start, length);
             Tdistance = s;
             System.out.println("Tdistance: "+ Tdistance);
             tourTabel[3]=Tdistance;
             
             for(int i = 0;i<=3;i++)
             {
                System.out.println("Tabelindhold: "+ tourTabel[i]);
             }
             
             addTour(tourTabel[0],tourTabel[1],tourTabel[2],tourTabel[3]);
          }
          TdistanceTest=null;   
    }
    
    public void addTour(String id, String navn, String aar, String distance)
    {
       int tmp1 = Integer.parseInt(id);
       int tmp2 = Integer.parseInt(distance);
       System.out.println(tmp2 +" "+ navn +" "+ aar +" "+ tmp2);
       //System.out.println("Størelse: "+cm.tourList.size());
       cm.addTour(tmp1,navn,aar,tmp2); // Fejl sker her....
       System.out.println("Størelse: "+cm.tourList.size());
    }
 ARGH!! mens jeg skriver dette har jeg siddet kigget på min kode og jeg
 har glemt at lave en instance af CykelMain
 
 Jeg havde bare skrevet "CykelMain cm;" men jeg mangler jo "cm = new
 CykelMain();"
 
 Nu har jeg bare et spørgsmål... Hvordan undgår jeg at den bliver
 overskrevet når jeg gør det samme i en anden klasse
 
 public class CykelProgram_GUI extends javax.swing.JFrame
 {
    private CykelMain cm;
    static boolean Voksen = false;
    static int rytterID;
    static int tourID;
    static int sponsorID;
    /** Creates new form CykelProgram_GUI */
    public CykelProgram_GUI()
    {
       cm = new CykelMain();
       initComponents();
    }
 
 Eller sker det ikke... ? Er lidt usikker på hvordan det helt præcist
 virker.
 
 MVH Memborg
  
            
             |   |   
            
        
 
            
         
             Thorbjoern Ravn Ande~ (29-08-2004) 
         
	
            | Kommentar Fra : Thorbjoern Ravn Ande~ | 
  Dato :  29-08-04 16:50 |  
  |  
 
            Memborg <memborg@tdcadsl.dk> writes:
 >          if(TnavnTest == "Tnavn")
 Du skal nok lige læse på String.equals.
 -- 
   Thorbjørn Ravn Andersen
   http://unixsnedkeren.dk/ravn
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |