niezrozumiały problem z rzutowaniem.

niezrozumiały problem z rzutowaniem.
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

Witam wszystkich forumowiczów. Piszę kolejnego posta = kolejny problem. Może ktoś im wytlumaczy co jest nie tak. Ogolnie problam nie pokazuje żadnego błędu...ale po wykonaniu programu otrzymuje błąd:
"Exception in thread "AWT-EventQueue-1" java.lang.ClassCastException: java.lang.String cannot be cast to XXXX"

Problem leży w tym kawałku kodu: tam gdzie wykonuje rzutowanie:

Object[] tab ;
Towar price;
double price2;

private void serrrerfPerformed(java.awt.event.ActionEvent evt) {                                         

    if(listaTowary.getSelectedIndex() >= 0 ) {
        tab = listaTowary.getSelectedValues();
        for(Object obj : tab ) {
            listaModelKoszyk.addElement(obj);
        }
    } else {
        JOptionPane.showMessageDialog(null, "Wybierz towar(y)");
    }
    
    for(Object obj : tab ) {
        price = (Towar)obj;          // czemu tu jest błąd po dodaniu kilku towarów do listy koszyka ????
        price2 += price.getCena();
    }

Wiecie co tu jest nie tak ?? Prosze o pomoc.

VI
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:212
0

Dodajesz do tab elementy typu String, które nie są rzutowalne na typ Towar. Pokaż cały kod.

edytowany 1x, ostatnio: Visher
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

Nie rozumiem zbytnio...do tab dodaje tylko obiekty, ktore zwraca metoda getSlectedValues. Dołączam załącznik

  • jj.rar (3 KB) - ściągnięć: 116
NoZi
Ale getSlectedValues zwraca ci Stringa a nie obiekt towar
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

w netbeansie mam podpowiedź, że zwraca tablicę obiektów... mam netbeansa 7.2.1

KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

a skad wziales informacje ze ta metoda zwraca String ?

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około godziny
0

Odpal sobie program pod debuggerem i postaw breakpointa na linijce: tab = listaTowary.getSelectedValues();, to najlepiej dowiesz się co tam siedzi.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

Ale nic nie widze wlasnie... result jest pusty, watches jest pusty a w output komunikat "Not able to submit breakpoint MethodBreakpoint [ZadNB.ListModelPanel].jButton1ActionPerformed '(Ljava/awt/event/ActionEvent;)V', reason: Method 'jButton1ActionPerformed' with signature '(Ljava/awt/event/ActionEvent;)V' does not exist in class ZadNB.ListModelPanel.
Breakpoint hit at line 265 in class ZadNB.ListModelPanel by thread AWT-EventQueue-1."

Dalej nie widze, gdzie ta metoda zwraca String... ????

KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

Object[] tab ;//= new Object[100];
Towar price;
Towar chhhh;
double price2;
String ggggg;

private void prawyAllActionPerformed(java.awt.event.ActionEvent evt) {                                         

    if(listaTowary.getSelectedIndex() >= 0 ) {
        tab = listaTowary.getSelectedValues();
        for(Object obj : tab ) {
            listaModelKoszyk.addElement(obj);
        }
    } else {
        JOptionPane.showMessageDialog(null, "Wybierz towar(y)");
    }
    
    for(Object obj : tab ) { // faktycznie, rzekomo tab zawiera Stringi,
                             //ale wedlug netbeansa zwraca tablice obiektów
                             //co prawda String tez jest obiektem
                             //ale gdyby to tak miało działać....jak wygląda to
                             // pętdla for(String obj : tab) powina byc prawidlowa petląa tak nie jest
        chhhh = (Towar) obj;
        
        ggggg = (String) obj;
        cena5.setText(ggggg);
        cena5.setText(chhhh.getCena()+"");
        cena5.setText(tab+" ");

Moze inne rady ? :(

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około godziny
0

Zwykły println wystarczy, żeby przekonać się co jest w środku:

Kopiuj
class Main
{
        public static void main (String[] args)
        {
                Object[] objs = new String[2];
                System.out.println(objs);
        }
}

daje np:
[Ljava.lang.String;@18c28a

Jak chcesz mieć fora po Stringach to musisz zrobić rzutowanie, np: http://ideone.com/hqHDRY


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit
KL
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 9 lat
  • Postów:34
0

Rzutować potrafie, sopkojnie :p Błąd już zlokalizowałem, dzisiaj wieczorem będe to naprawiał. Błąd pojawił się w Tworzeniu obiektu Towar().

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.