Probelem z dostepem do zmiennych

0

Witam

wiem ze ten temat sie przewija bardzo czesto. Niestety ja mam chyba dosyc dziwny problem:(
mam dwie klasy:

  1. sluzy tylko do wywolania drugiej bo to jest frame, ktory bedzie sie zmienial na podstawie tej drugiej klasy
  2. klasa druga jest parserem xmla. Problem jest z tym ze jak tylko chce przeslac dane pomiedzy jedna a druga klasa to wyrzuc null (przesylam stringa)
    Stworzylem nawetfunkcje ktora zwraca tylko i wylacznie ten string ale ciagle to samo ... ciagle null :(

pomocy :)

0

a swistak siedzi i bajki opowiada.
przeczytaj zasady pisania tematow i jak to nie pomoze to i zarzuc fragmentem kodu? skad niby mamy wiedziec co robisz zle?

pozdrawiam

0
class MySaxParser extends DefaultHandler {

  private int ile_walut=0;
  private int flaga=0, flaga2=0, flaga3=0;
  private int pozycja=0, flaga_data=0;


  public int zmienna_szerokosc;
  public Integer zmienna_y;
  public int zmienna_x;
  public int zmienna_wysokosc;
  private int sciezka;

    public String sciezeczka;


/////glowny parser
  public void ParsowanieXml() {

  //wywolanie funkcji PobierzUrl ktora poszukuje linka do xml na stronie nbp.pl
      PobierzUrl x= new PobierzUrl();
      String adres = x.pokazURL();
      System.out.println("POBIERAM XML ZE STRONY: " + adres);

    String uri = adres;
    try {
      SAXParserFactory parserFactory = SAXParserFactory.newInstance();
      parserFactory.setValidating(false);
      parserFactory.setNamespaceAware(false);
      MySaxParser MySaxParserInstance = new MySaxParser();
      SAXParser parser = parserFactory.newSAXParser();
      parser.parse(uri, MySaxParserInstance);
    }
    catch(IOException ex) {
      ex.printStackTrace();
    }
    catch(SAXException ex) {
      ex.printStackTrace();
    }
    catch(ParserConfigurationException ex) {
      ex.printStackTrace();
    }
    catch(FactoryConfigurationError ex) {
      ex.printStackTrace();
    }

  }

 //funkcje paresera sax
  public void characters(char[] ch, int start, int length)
     throws SAXException {
 String s = new String(ch, start, length);
 if(sciezka==1)
 {
     sciezeczka=s;
     
     System.out.println("sciekza do pliku: " +sciezeczka);

 }
     
 if(flaga==1&&flaga2==1&&flaga3==1){

     if (!s.startsWith("\n")) 
     {

         if(pozycja==0) 
         {
             zmienna_x = Integer.valueOf(s);
         }
         if(pozycja==1) 
         {
             zmienna_y = Integer.valueOf(s);
         }
         if(pozycja==2) 
         {
             zmienna_wysokosc = Integer.valueOf(s);
         }
         if(pozycja==3) 
         {
             zmienna_szerokosc = Integer.valueOf(s);
         }
         

     }

 }
}
  public void endDocument() throws SAXException {
   System.out.println("\n...PARSOWANIE plkiu zakonczone");
   System.out.println(sciezeczka);
   
  }
  public void endElement(String uri, String localName, String qName)
      throws SAXException {

  if(sciezka==1) sciezka=0;
  if(flaga==1&&flaga2==1&&qName.equals("x")){

      flaga3=0;
      pozycja=1;

  }
    if(flaga==1&&flaga2==1&&qName.equals("y")){

      flaga3=0;
      pozycja=2;

  }
    if(flaga==1&&flaga2==1&&qName.equals("wysokosc")){

      flaga3=0;
      pozycja=3;

  }
    if(flaga==1&&flaga2==1&&qName.equals("szerokosc")){

      flaga3=0;
      pozycja=4;

  }
  //konczy element - pozycja - wpisuje dane o walucie do bazy danych i wyswietla na ekranie
    if(qName.equals("pozycja")&&flaga2==1) {

        //wypisuje na ekran kursy
        System.out.println("x: " + zmienna_x);
        System.out.println("y: " +zmienna_y);
        System.out.println("wysokosc: " +zmienna_wysokosc);
        System.out.println("szerokosc: " +zmienna_szerokosc);
        //przygotowuje zmienne na nastepna pozycje
        flaga = 0;
        flaga2=0;
        pozycja=0;

    }
}


  public void startDocument() throws SAXException {
   System.out.println("PARSOWANIE rozpoczete...\n");
  }


  public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException 
  {
    if(qName.equals("sciezka"))
        sciezka=1;
    if(qName.equals("pozycja")) {
        //ile_walut++;
        flaga=1;}
    if(flaga==1){
    //if(ile_walut>1&&ile_walut<10){ //ktore kursy maja byc wyswietlone
        flaga2=1;
    }

    if(flaga==1&&flaga2==1&&(qName.equals("x")||qName.equals("y")||qName.equals("wysokosc")||qName.equals("szerokosc"))){
        flaga3=1;

    }
    

    }
  
  
      public String zwrot()
    {
        String dana = sciezeczka;
        
        System.out.println(dana);
        return sciezeczka;
      }

}

To jest klasa parsera


    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      

        MySaxParser parsowanie = new MySaxParser();
        parsowanie.ParsowanieXml();
        MySaxParser x = new MySaxParser();
        String adres = x.zwrot();
        System.out.println("POBIERAM XML ZE STRONY: " + adres);
        
    } 

Jak nacisne przycisk to wtedy odpali mi parsowanie

To jest kod tego malutkiego programiku.

0

gdzie wystepuje blad? masz jakis stackTrace?

pozdrawiam

0

no wlasnie ze bledu nie ma zadnego :(
tylko problem jest jeden :

  public String zwrot()
{
    String dana = sciezeczka;
   
    System.out.println(dana);
    return sciezeczka;
  }

ta funkcja podczas wywolania

private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                     

    MySaxParser parsowanie = new MySaxParser();
    parsowanie.ParsowanieXml();
    MySaxParser x = new MySaxParser();
    String adres = x.zwrot();
    System.out.println("POBIERAM XML ZE STRONY: " + adres);
   
} 

powinna mi zwrocic adres a zwraca nulla i nie mam pojecia czemu, w tym jest caly problem.
na pewno cos robie zle, dziekuje za wszystkie wskazowki :) i rady :)

0

1)dlaczego publiczne? (private oraz getter)
2)po co metoda zwrot?
3)nie inicjalizujesz zmiennej sciezeczka jesli sciezka!=1

pozdrawiam

0
  1. publiczne zeby miec do nich dostep potem
  2. metoda zwrot jest tylko po to aby do zmiennej adres przypisac wartos sciezeczka
  3. wyjasnij to co miales na mysli
  4. to odnosi sie do xml ktory parsuje akurat
0
poczatkujacy w javie napisał(a)
  1. publiczne zeby miec do nich dostep potem

no to zastosuj getCostam(), publiczne pola to zly styl programowania

co do inicjalizacji - chodzilo o to w ktorym miejscu przypisujesz polu "sciezeczka" jakas wartosc
a z equals pomylilem zmienne - stosowanie sciezka i sciezeczka to nienajlepszy pomysl...
w kazdym razie - jesli "sciezka" != 1 to "sciezeczce" nie przypisujesz zadnej wartosci!

pozdrawiam

0

@eximius, "sciezka" jest polem obiektu czyli ma nadaną wartość domyślną w momencie tworzenia obiektu. Jest to int więc ma wartość 0. Jeżeli nie byłby inicjowany to by wywalił błąd w trakcie kompilacji "variable might not have been initialized".

Jednak błąd jest poważny ponieważ "sciezka" na dzień dobry ma wartość 0 i nie są spełnione warunki z ifów.

0

Dzieki wszyzstkim za pomoc :) no i oczywiscie za rady;)
problem rozwiazalem dzieki klasie, w ktorej sa przetrzymywane zmienne.
na razie dziala :)
Pozdrowionka :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1