Gå til innhold

ClassCastExeption, hva er det?


Anbefalte innlegg

Hei!

 

Får en feilmelding når jeg starter programmet mitt: Exception in thread "main" java.lang.ClassCastException

 

I første omgang er jeg interessert i å vite hva kan forårsake det, og hvis jeg ikke får det til etter hint fra dere kan jeg gjerne legge ut koden for programmet.

 

Som dere sikkert har skjønnt har jeg ikke noe bre erfaring innen programmering! :)

Lenke til kommentar
Videoannonse
Annonse
Hei!

 

Får en feilmelding når jeg starter programmet mitt: Exception in thread "main" java.lang.ClassCastException

 

I første omgang er jeg interessert i å vite hva kan forårsake det, og hvis jeg ikke får det til etter hint fra dere kan jeg gjerne legge ut koden for programmet.

 

Som dere sikkert har skjønnt har jeg ikke noe bre erfaring innen programmering! :)

http://java.sun.com/j2se/1.5.0/docs/api/ja...tException.html

 

Feilmeldingen sier sikkert noe om hvilken linje feilen skjer på også, så da har du litt mer å jobbe med.

Lenke til kommentar

Bare for å opplyse, så er det en obligatorisk oppgave i kurset inf-1000(UiO) jeg sliter med.

 

Her er koden til metoden jeg får problemer med:

void lesVaerDataFraFil(String fnavn) {

In innfil = new In("Vaerdata-1.txt");

while(!innfil.lastItem()){

String stasjonsnummer = innfil.inWord();

int dag = innfil.inInt();

int måned = innfil.inInt();

double maxVind = innfil.inDouble();

double nedbør = innfil.inDouble();

double minTemp = innfil.inDouble();

double maxTemp = innfil.inDouble();

Maanedsdata mdata = new Maanedsdata(måned, dag);

Stasjon st = (Stasjon) stasjonFraNr.get(stasjonsnummer);

st.maanedsdata[måned-1] = mdata;

stasjonFraNavn.put(st.stasjonsnavn, st.maanedsdata);

stasjonFraNr.put(stasjonsnummer, st.maanedsdata);

 

}

 

}

Bakgrunnsinfo: Har allerede lest inn info om stasjoner fra en annen fil, og nå skal jeg altså lese inn månedsdataene for de respektive stasjonene og legge det i hashmappen igjen. Vi bruker to hashmapper en med stasjonsnummer som nøkkel og en annen med stasjonsnavn som nøkkel, men begge skal inneholde det samme objektet. Innlesinga er gjort med hjelp fra EasyIO, en pakke som er laget av de som har kurset.

 

 

Får problemer i fjerde siste linje, er fullt klar over at koden er amatør messig. Blir glad over tips til å fikse dette.

Lenke til kommentar
Får problemer i fjerde siste linje, er fullt klar over at koden er amatør messig. Blir glad over tips til å fikse dette.

 

Stasjon st = (Stasjon) stasjonFraNr.get(stasjonsnummer);

Denne? Problemet er altså at metoden ikke returnerer en instans av klassen 'Stasjon'. Se litt nærmere på denne metoden, og hva slags type objekt du faktisk har lagret i hashmappet.

 

Hva sier exception trace? Flott om du paster de første 2-3 linjene av dette også.

Endret av Frank2004
Lenke til kommentar

Her er den andre metoden som leser inn stasjons data:

 

void lesStasjonerFraFil(String fnavn) {

In innfil = new In("Stasjoner-1.txt");

while(!innfil.lastItem()) {

String stasjonsnummer = innfil.inWord();

String stasjonsnavn = innfil.inWord();

String høyde = innfil.inWord();

String kommune = innfil.inWord();

String fylke = innfil.inWord("/n");

Stasjon st = new Stasjon(stasjonsnummer, stasjonsnavn, høyde, kommune, fylke);

stasjonFraNavn.put(stasjonsnavn, st);

stasjonFraNr.put(stasjonsnummer, st);

}

 

}

 

Exection in thread "main" java.lang.ClassCastException

at VaerAnalyse.lesVaerDataFraFil(Oblig4.java:53)

at VaerAnalyse.<init>(Oblig4.java:23)

at Oblig4.main(Oblig4.java:12)

 

der linje 53 er den linja som er omtalt i forrige post:

Stasjon st = (Stasjon) stasjonFraNr.get(stasjonsnummer);

 

Takker, for tålmodighet!

Lenke til kommentar
  Stasjon st = new Stasjon(stasjonsnummer, stasjonsnavn, høyde, kommune, fylke);
 stasjonFraNavn.put(stasjonsnavn, st);
 stasjonFraNr.put(stasjonsnummer, st);

 

Exection in thread "main" java.lang.ClassCastException

at VaerAnalyse.lesVaerDataFraFil(Oblig4.java:53)

at VaerAnalyse.<init>(Oblig4.java:23)

at Oblig4.main(Oblig4.java:12)

 

der linje 53 er den linja som er omtalt i forrige post:

Stasjon st = (Stasjon) stasjonFraNr.get(stasjonsnummer);

Hmm.. Ser jo absolutt ut som om det du legger inn i map'et er en Stasjon, ja.

Prøv å wrappe linje 53 i en try/catch-blokk, og printe ut typen?

 

Noe a.la:

try {
 Object o = stasjonFraNr.get(stasjonsnummer);
 Stasjon st = (Stasjon) stasjonFraNr.get(stasjonsnummer);
} catch (Exception e) {
 System.out.println("Type: " +o.getClass().getName() );
 e.printStackTrace();
}

 

Er forresten ikke nødvendig å legge objektet inn i map igjen etter at du har endret det. Get() henter bare ut en referanse til objektet, som fortsatt også kan nås gjennom map'ene.

Lenke til kommentar

Jeg tror feilen ligger i en annen del i programmet. Kanksje i klassen "Stasjon", men det er vanskelig å si når jeg bare har denne lille delen å se på. Legg ut koden i klassen stasjon, så kanskje jeg kan hjelpe eller så er det sikkert noen andre her som ser feilen.

 

Hvis du legger ut mer, så ta med linjenummer også. Tror det er mulig å få med det når du paster, men ikke husker ikke hvordan.

Endret av Nudo
Lenke til kommentar

Stasjon st = (Stasjon) stasjonFraNr.get(stasjonsnummer);

Har du 100 % oversikt over forskjell på statiske og ikke-statiske metoder og variabler?

 

For meg ser det ut som om du har et vilkårlig stasjonsnummer og vil vite hvilken stasjon som har dette stasjonsnummeret. Dette må da i en statisk metode. Et enkelt stasjonsobjekt har ingen kjennskap til andre stasjonsobjekter. En statisk Collection-variabel vil imidlertid kunne gjøre denne mappingen for deg.

Endret av buskmann
Lenke til kommentar
Har du 100 % oversikt over forskjell på statiske og ikke-statiske metoder og variabler?

 

For meg ser det ut som om du har et vilkårlig stasjonsnummer og vil vite hvilken stasjon som har dette stasjonsnummeret. Dette må da i en statisk metode. Et enkelt stasjonsobjekt har ingen kjennskap til andre stasjonsobjekter. En statisk Collection-variabel vil imidlertid kunne gjøre denne mappingen for deg.

stasjonFraNr en instans av java.util.HashMap, og ikke av Stasjon?

Endret av oro2
Lenke til kommentar
stasjonFraNavn.put(st.stasjonsnavn, st.maanedsdata);

stasjonFraNr.put(stasjonsnummer, st.maanedsdata);

Her legges det vel inn noe som ikke er en instans av Stasjon? Tror det er det som fucker opp. Uten at jeg kan si det med sikkerhet da jeg ikke har sett Stasjon-klassen.

Endret av oro2
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...