Minulla on HashMap olion sisältävä luokka joka pitäisi tallentaa, ja pystyä lataamaan, olen yrittänyt Object(In\Out)putStream:n avulla, mutta jostain syystä tiedostoa ei pysty lataamaan, -kyseessä on IOException, mutta minulla ei ole hajuakaan mistä se tulee?
-ArrayList sisältää Tapahtuma -olioita;
Miksiköhän tuo (Tapahtuma kirjasto) luokka antaa varoituksen Serializable:sta??
prkle kun ei missään ole oikeita virheitä ni ei voi edes arvaamalla yrittää!!
Olioiden tallentaminen ja lukeminen
20
1214
Vastaukset
- Out..
Vähän vaikea sanoa mitään, kun en tiedä mitään mistään Tapahtuma olioista. On varmaan taas jonkun oppilaitoksen kirjastoja/luokkia, prkle ;-) Miten et voi tietää mistä virhe tulee, sillä et kai nyt sentään lopeta ohjelmaa suoraan IOExceptioniin ilman että kutsuisit ensin printStackTrace:a? Sinulta jäi se varoituskin kirjoittamatta.
Käy lenkillä ja mieti hommaa uudelleen... Tai sitten lähdet baariin rauhoittumaan... Kysyt sitten maanantaina "koulussa" joltain miten homma menee... :-)- sss
Kun virheilmoitus on null! En ole ikinä törmänny vastaavaan. Tapahtuma (luokka) -olio on ihan yksinkertainen tieto tapahtuman nimestä ajankohdasta ja tärkeydestä. Tapahtumakirjasto (luokka) on HashMap jossa Tapahtuma olioita säilytetään.
- sanoa
sss kirjoitti:
Kun virheilmoitus on null! En ole ikinä törmänny vastaavaan. Tapahtuma (luokka) -olio on ihan yksinkertainen tieto tapahtuman nimestä ajankohdasta ja tärkeydestä. Tapahtumakirjasto (luokka) on HashMap jossa Tapahtuma olioita säilytetään.
mitään. Tulostaako ohjelma ruudulle vain "null!" ja pysähtyy, eikä tee mitään muuta?
- sss
sanoa kirjoitti:
mitään. Tulostaako ohjelma ruudulle vain "null!" ja pysähtyy, eikä tee mitään muuta?
catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
tämä antaa null,
muu ohjelma jatkaa niinkuin ei mitään - ei kannata
sss kirjoitti:
catch (IOException ioe) {
System.out.println(ioe.getMessage());
}
tämä antaa null,
muu ohjelma jatkaa niinkuin ei mitäänkoskaan tehdä, vaan:
catch (IOException ioe) {
ioe.printStackTrace();
System.exit(1);
}
Siis exceptionista kannattaa aina tulostaa mistä se on lähtöisin, sillä pelkällä viestillä ei paljon ole hyötyä, koska sitä ei edes aina asenneta koska exceptionin nimi kertoo jo mistä on kysy (EOFException, FileNotFoundException, jne.).
Mainitsemasi EOFException jonka tietenkin IOException catchaa, tulee todennäköisesti readObject riviltä. Viittaisi siihen että yrität lukea väärää tiedostoa tai sitten tiedosto on tyhjä. Näyttääkö teksti editori että siinä tiedostossa olisi jotain mistä luet? - sss
ei kannata kirjoitti:
koskaan tehdä, vaan:
catch (IOException ioe) {
ioe.printStackTrace();
System.exit(1);
}
Siis exceptionista kannattaa aina tulostaa mistä se on lähtöisin, sillä pelkällä viestillä ei paljon ole hyötyä, koska sitä ei edes aina asenneta koska exceptionin nimi kertoo jo mistä on kysy (EOFException, FileNotFoundException, jne.).
Mainitsemasi EOFException jonka tietenkin IOException catchaa, tulee todennäköisesti readObject riviltä. Viittaisi siihen että yrität lukea väärää tiedostoa tai sitten tiedosto on tyhjä. Näyttääkö teksti editori että siinä tiedostossa olisi jotain mistä luet?Joo, tiedosto vaikuttaisi olevan ok.
Pitää kokeilla tuota printStack:iä - sss
ei kannata kirjoitti:
koskaan tehdä, vaan:
catch (IOException ioe) {
ioe.printStackTrace();
System.exit(1);
}
Siis exceptionista kannattaa aina tulostaa mistä se on lähtöisin, sillä pelkällä viestillä ei paljon ole hyötyä, koska sitä ei edes aina asenneta koska exceptionin nimi kertoo jo mistä on kysy (EOFException, FileNotFoundException, jne.).
Mainitsemasi EOFException jonka tietenkin IOException catchaa, tulee todennäköisesti readObject riviltä. Viittaisi siihen että yrität lukea väärää tiedostoa tai sitten tiedosto on tyhjä. Näyttääkö teksti editori että siinä tiedostossa olisi jotain mistä luet?java.io.EOFException
at java.io.ObjectInputStream$BlockDataInputStream.
peekByte(ObjectInputStream.java:2502)
at java.io.ObjectInputSream.
readObject(ObjectInputStream.java:339)
at ..kaikki viittaukset lataaTiedosto -metodiin
- zustus
Olion pitää implementoida Serializable-rajapinta että sen voi tallentaa tiedostoon. HashMap sen tekee, mutta luokka johon mäpin talletat pitäisi myös.
http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html- sss
Tämä onkin mielenkiintoinen juttu kun luokka Tapahtumat jossa ks. hashmap on privat luokkana, ja tämä luokka toteuttaa Serializablen, mutta kääntäjä antaa varoituksen:
warning: [serial] serializable class Tapahtumat has no definition of serialVersionUID
public class Tapahtumat implements Serializable {
^
Tapahtumat on siis olio jota voi käyttää ja joka luodaan käyttöliittymä luokassa, (pitääkö tämänkin luokan toteuttaa serializable?)
Tallennus luokassa yritän tallentaa staattisena kenttänä käyttöliittymässä olevaa (Tapahtumat) kaikki(/nimi) -oliota.
Mistä voisi löytää tieto miten luokka voi toteuttaa useampia rajapintoja, kun käyttöliittymä implimoi jo ActionListener:n. - sss
sss kirjoitti:
Tämä onkin mielenkiintoinen juttu kun luokka Tapahtumat jossa ks. hashmap on privat luokkana, ja tämä luokka toteuttaa Serializablen, mutta kääntäjä antaa varoituksen:
warning: [serial] serializable class Tapahtumat has no definition of serialVersionUID
public class Tapahtumat implements Serializable {
^
Tapahtumat on siis olio jota voi käyttää ja joka luodaan käyttöliittymä luokassa, (pitääkö tämänkin luokan toteuttaa serializable?)
Tallennus luokassa yritän tallentaa staattisena kenttänä käyttöliittymässä olevaa (Tapahtumat) kaikki(/nimi) -oliota.
Mistä voisi löytää tieto miten luokka voi toteuttaa useampia rajapintoja, kun käyttöliittymä implimoi jo ActionListener:n.Nyt sain sen Exceptionin, se ei olekaan IOException vaan java.io.EOFException..
end of file..
ei hajuakaan mistä tuo aiheutuu - Piru
sss kirjoitti:
Tämä onkin mielenkiintoinen juttu kun luokka Tapahtumat jossa ks. hashmap on privat luokkana, ja tämä luokka toteuttaa Serializablen, mutta kääntäjä antaa varoituksen:
warning: [serial] serializable class Tapahtumat has no definition of serialVersionUID
public class Tapahtumat implements Serializable {
^
Tapahtumat on siis olio jota voi käyttää ja joka luodaan käyttöliittymä luokassa, (pitääkö tämänkin luokan toteuttaa serializable?)
Tallennus luokassa yritän tallentaa staattisena kenttänä käyttöliittymässä olevaa (Tapahtumat) kaikki(/nimi) -oliota.
Mistä voisi löytää tieto miten luokka voi toteuttaa useampia rajapintoja, kun käyttöliittymä implimoi jo ActionListener:n.eli ei pitäisi edes haitata. "has no definition of serialVersionUID" näyttäis siltä, että pitäis olla tollanen staattinen muuttuja luokassa, joka kertoo millä versiolla serialisointi on tehty. Eti googlesta.
Sen luokan pitää toteuttaa serializable, jota yrität sinne tiedostoon laittaa. Jos tiedostoon laitetaan Tapahtuma-olio, niin sitten Tapahtuman pitää toteuttaa se.
Implementointi onnistuu ihan vaan erottamalla toteutettavat rajapinnat pilkuilla.
public class Tapahtuma extends Jotain implements Serializable, ActionListener{
//luokan koodi
} - fani__
sss kirjoitti:
Nyt sain sen Exceptionin, se ei olekaan IOException vaan java.io.EOFException..
end of file..
ei hajuakaan mistä tuo aiheutuuEOF tulee kun tiedosto loppuu. Se ei vielä tarkoita, että homma olisi mennyt pipariksi. Jatka vaan eteenpäin, katso mitä olet saanut tiedostosta luetuksi.
Veikkaan, että yrität lukea olioita silmukassa. Kun tiedoston viimeinen olio on luettu, ei voida lukea enempää, jolloin tulee EOF. Tämä ei ole "virhe" sinänsä, vaan exception kertoo että tiedostossa ei ole enää mitään luettavaa. Kaikki mahdolliset oliot on jo luettu. - sss
fani__ kirjoitti:
EOF tulee kun tiedosto loppuu. Se ei vielä tarkoita, että homma olisi mennyt pipariksi. Jatka vaan eteenpäin, katso mitä olet saanut tiedostosta luetuksi.
Veikkaan, että yrität lukea olioita silmukassa. Kun tiedoston viimeinen olio on luettu, ei voida lukea enempää, jolloin tulee EOF. Tämä ei ole "virhe" sinänsä, vaan exception kertoo että tiedostossa ei ole enää mitään luettavaa. Kaikki mahdolliset oliot on jo luettu.Hmhmhmhmhhhm!
Tulin just ks. tentistä!
Kurssin lopputyötä teen.
Kiitos jo vastanneille!
Jostain syystä tiedostosta ei tule siltikään tietoa!
muutamia arvauksia tässä: (kertokaa jos joku voi pitää paikkaansa)
-ObjectInput/OutputStream on asetettu nulliksi kentässä, ei konstruktorissa
-Luon HashMap:n aina uudestaan ohjelman käynnistyessä, ja tiedot eivät mene sinne siksi (Luokka.tapahtumat = new Tapahtumat();
Luokka.tapahtumat.lataaTapahtumat(); )
-Ohjelma on 8luokkainen ja jokin niistä ei implikoi serializablea vaikka pitäisi
-jokin muu
ps. En lataa olioita silmukassa, tallennus vain suljettaessa, lataus vain käynnistyksessä - sss
Piru kirjoitti:
eli ei pitäisi edes haitata. "has no definition of serialVersionUID" näyttäis siltä, että pitäis olla tollanen staattinen muuttuja luokassa, joka kertoo millä versiolla serialisointi on tehty. Eti googlesta.
Sen luokan pitää toteuttaa serializable, jota yrität sinne tiedostoon laittaa. Jos tiedostoon laitetaan Tapahtuma-olio, niin sitten Tapahtuman pitää toteuttaa se.
Implementointi onnistuu ihan vaan erottamalla toteutettavat rajapinnat pilkuilla.
public class Tapahtuma extends Jotain implements Serializable, ActionListener{
//luokan koodi
}public static final long serialVersionUID = 42L;
-tämä kentäksi ni warning lähti mutta varsinainen ongelma jäi;
Toinenkin warningi:
warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList
this.tapahtuu.get(koodi).add(kohta, uusi);
tämä tulee tällasesta paikasta:
//METODI LISÄÄ UUDEN TAPAHTUMAN MÄPPIIN
public void lisaaTapahtuma(String koodi, Tapahtuma uusi) {
//MERKITSEE LISTAN
ArrayList lista;
//TUTKITAAN ONKO PÄIVÄLLE JO TIETOJA(jos ei niin tallennetaan)
if(this.tapahtuu.get(koodi) == null) {
lista = new ArrayList();
lista.add(uusi);
this.tapahtuu.put(koodi, lista);
}
else {
//(jos on niin asetetaan tapahtumat tärkeysjärjestykseen)
int kohta = uusi.priorisoi();
if(uusi.priorisoi() > this.tapahtuu.get(koodi).size()) {
kohta--;
}
if(kohta < 0)
kohta = 0;
this.tapahtuu.get(koodi).add(kohta, uusi); //TÄSSÄ ON VAROITUS;
}
}
Tämä minun ymmärrykseni mukaan tarkoittaa että ArrayListiä ei ole luotu (pakosta) niin se luulee että se on tyhjä. Mutta kuten koodista näkee että Lista on olemassa jos mennään käskyn sisältävään if lauseeseen.
Jos meni *tuilleen niin ok.
Miten korjata, vai tarviiko edes? - sss
sss kirjoitti:
Hmhmhmhmhhhm!
Tulin just ks. tentistä!
Kurssin lopputyötä teen.
Kiitos jo vastanneille!
Jostain syystä tiedostosta ei tule siltikään tietoa!
muutamia arvauksia tässä: (kertokaa jos joku voi pitää paikkaansa)
-ObjectInput/OutputStream on asetettu nulliksi kentässä, ei konstruktorissa
-Luon HashMap:n aina uudestaan ohjelman käynnistyessä, ja tiedot eivät mene sinne siksi (Luokka.tapahtumat = new Tapahtumat();
Luokka.tapahtumat.lataaTapahtumat(); )
-Ohjelma on 8luokkainen ja jokin niistä ei implikoi serializablea vaikka pitäisi
-jokin muu
ps. En lataa olioita silmukassa, tallennus vain suljettaessa, lataus vain käynnistyksessäVoisiko olla, kun nyt luin vähän ulkopuolisen silmin että koska tuossa Tapahtumat luokassa konstruktorissa ei luoda uutta ArrayListiä ni niillä tallennetuilla tapahtumilla ei ole paikkaa minne mennä?
- väliin.
sss kirjoitti:
public static final long serialVersionUID = 42L;
-tämä kentäksi ni warning lähti mutta varsinainen ongelma jäi;
Toinenkin warningi:
warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList
this.tapahtuu.get(koodi).add(kohta, uusi);
tämä tulee tällasesta paikasta:
//METODI LISÄÄ UUDEN TAPAHTUMAN MÄPPIIN
public void lisaaTapahtuma(String koodi, Tapahtuma uusi) {
//MERKITSEE LISTAN
ArrayList lista;
//TUTKITAAN ONKO PÄIVÄLLE JO TIETOJA(jos ei niin tallennetaan)
if(this.tapahtuu.get(koodi) == null) {
lista = new ArrayList();
lista.add(uusi);
this.tapahtuu.put(koodi, lista);
}
else {
//(jos on niin asetetaan tapahtumat tärkeysjärjestykseen)
int kohta = uusi.priorisoi();
if(uusi.priorisoi() > this.tapahtuu.get(koodi).size()) {
kohta--;
}
if(kohta < 0)
kohta = 0;
this.tapahtuu.get(koodi).add(kohta, uusi); //TÄSSÄ ON VAROITUS;
}
}
Tämä minun ymmärrykseni mukaan tarkoittaa että ArrayListiä ei ole luotu (pakosta) niin se luulee että se on tyhjä. Mutta kuten koodista näkee että Lista on olemassa jos mennään käskyn sisältävään if lauseeseen.
Jos meni *tuilleen niin ok.
Miten korjata, vai tarviiko edes?Vastaan tähän väliin kun et varmaan enää lue tuota ekaa haaraa jossa olen huudellut. Se EOFException tulee yleensä sen readObject komennon yhteydessä silloin kun tiedosto on vioittunut tai objektia ei ole tallennettu oikein tai se luetaan väärin.
Mainitsemasi varoitus viittaa siihen että et ole kertonut ihan oikein mitä luokkia tapahtuu -olio (eli HashMap) käyttää, jonka takia kääntäjä antaa varoituksen. Tapahtuu olion määritelmän pitäisi olla seuraavanlainen:
private HashMap tapahtuu;
Se virhe voi johtua myös tästä yllä olevasta seikasta. Tai sitten Tapahtuma luokassa voi olla joku koodaus virhe jolloin serialisointi ei onnistu (mutta sen kyllä huomaisi todennäköisesti printStackTrace:n tulosteesta).
Syy voi olla myös tiedoston käsittelyssäsi, eli jos et tee flush toimintoa ObjectOutputStream oliollesi ennen sulkemista ja suljet vain FileOutputStream:n, niin tällöin kaikkea ei tallennu tiedostoon ja silloin tulee EOFException luettaessa. Itse sain näin ainakin generoitua EOFExceptionin. Käytätkö kirjoituksessa myös BufferedOutputStream luokkaa? Niin ja jos sama ohjelma kirjoittaa ja lukee sinne niin kai olet muistanut sulkea sen tiedoston mihin se kirjoitettaan? - sss
väliin. kirjoitti:
Vastaan tähän väliin kun et varmaan enää lue tuota ekaa haaraa jossa olen huudellut. Se EOFException tulee yleensä sen readObject komennon yhteydessä silloin kun tiedosto on vioittunut tai objektia ei ole tallennettu oikein tai se luetaan väärin.
Mainitsemasi varoitus viittaa siihen että et ole kertonut ihan oikein mitä luokkia tapahtuu -olio (eli HashMap) käyttää, jonka takia kääntäjä antaa varoituksen. Tapahtuu olion määritelmän pitäisi olla seuraavanlainen:
private HashMap tapahtuu;
Se virhe voi johtua myös tästä yllä olevasta seikasta. Tai sitten Tapahtuma luokassa voi olla joku koodaus virhe jolloin serialisointi ei onnistu (mutta sen kyllä huomaisi todennäköisesti printStackTrace:n tulosteesta).
Syy voi olla myös tiedoston käsittelyssäsi, eli jos et tee flush toimintoa ObjectOutputStream oliollesi ennen sulkemista ja suljet vain FileOutputStream:n, niin tällöin kaikkea ei tallennu tiedostoon ja silloin tulee EOFException luettaessa. Itse sain näin ainakin generoitua EOFExceptionin. Käytätkö kirjoituksessa myös BufferedOutputStream luokkaa? Niin ja jos sama ohjelma kirjoittaa ja lukee sinne niin kai olet muistanut sulkea sen tiedoston mihin se kirjoitettaan?Joo, totta oli että ArrayList piti määritellä paremmin.
Tämä tallennus luokka on melko ylivoimasen iso juttu minun peruskurssi tiedoille: onneksi apista on jotain apua mutta; tässäpä olisi vähän mietittävää, lisäsin juuri sen huuhtelun, mutten ole ihan varma miten oikein se on. Tiedoston sulkemisesta, no ainakin ne virrat on suljettu: miepä laitan tallennusluokan konstruktorin ja metodit tähän: Toivottavasti kukaan ei loukkaa itseään. =)
//KONSTRUKTORI
public Tallennus() {
this.save = null;
try {
this.save =
new ObjectOutputStream(new FileOutputStream("dateplan.tmp"));
}
catch(IOException luotallenna) {
System.out.println("Virhe tallennus tiedoston luomisessa");
}
this.load = null;
try {
this.load =
new ObjectInputStream(new FileInputStream("dateplan.tmp"));
}
catch(IOException luolataa) {
System.out.println("Virhe lataus tiedoston luomisessa");
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//TALLENNUS METODI
public void tallennaTiedot() {
//TALLENNETAAN TIEDOT
try {
this.save.writeObject(Kalenteri.kaikki);
}
catch(IOException tallennus) {
System.out.println("Virhe tiedoston tallennuksessa");
}
//FLUSH?
try {
this.save.flush();
}
catch(IOException huuhdo) {
System.out.println("Virhe virran huuhtomisessa!");
}
//SULJETAAN TIEDOSTO
try {
if(this.save != null)
this.save.close();
}
catch(IOException sulkemis) {
System.out.println("Virhe tiedoston sulkemisessa");
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//LATAUS METODI
public void lataaTiedot() {
//LADATAAN TIEDOT
try {
Kalenteri.kaikki = (Tapahtumat) this.load.readObject();
}
catch(IOException ioe) {
ioe.printStackTrace();
}
catch(ClassNotFoundException eiloydy) {
System.out.println("Tarvittaavaa luokkaa ei löydy");
}
//SULJETAAN TIEDOSTO
try {
if(this.load != null)
this.load.close();
}
catch(IOException sulje) {
System.out.println("Virhe tiedoston sulkemisessa");
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Että tämmönen.
Ei siinä pitäs vikkaa olla(ainakaan opinto monisteitten mukaan =) ). - fani__
sss kirjoitti:
Joo, totta oli että ArrayList piti määritellä paremmin.
Tämä tallennus luokka on melko ylivoimasen iso juttu minun peruskurssi tiedoille: onneksi apista on jotain apua mutta; tässäpä olisi vähän mietittävää, lisäsin juuri sen huuhtelun, mutten ole ihan varma miten oikein se on. Tiedoston sulkemisesta, no ainakin ne virrat on suljettu: miepä laitan tallennusluokan konstruktorin ja metodit tähän: Toivottavasti kukaan ei loukkaa itseään. =)
//KONSTRUKTORI
public Tallennus() {
this.save = null;
try {
this.save =
new ObjectOutputStream(new FileOutputStream("dateplan.tmp"));
}
catch(IOException luotallenna) {
System.out.println("Virhe tallennus tiedoston luomisessa");
}
this.load = null;
try {
this.load =
new ObjectInputStream(new FileInputStream("dateplan.tmp"));
}
catch(IOException luolataa) {
System.out.println("Virhe lataus tiedoston luomisessa");
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//TALLENNUS METODI
public void tallennaTiedot() {
//TALLENNETAAN TIEDOT
try {
this.save.writeObject(Kalenteri.kaikki);
}
catch(IOException tallennus) {
System.out.println("Virhe tiedoston tallennuksessa");
}
//FLUSH?
try {
this.save.flush();
}
catch(IOException huuhdo) {
System.out.println("Virhe virran huuhtomisessa!");
}
//SULJETAAN TIEDOSTO
try {
if(this.save != null)
this.save.close();
}
catch(IOException sulkemis) {
System.out.println("Virhe tiedoston sulkemisessa");
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//LATAUS METODI
public void lataaTiedot() {
//LADATAAN TIEDOT
try {
Kalenteri.kaikki = (Tapahtumat) this.load.readObject();
}
catch(IOException ioe) {
ioe.printStackTrace();
}
catch(ClassNotFoundException eiloydy) {
System.out.println("Tarvittaavaa luokkaa ei löydy");
}
//SULJETAAN TIEDOSTO
try {
if(this.load != null)
this.load.close();
}
catch(IOException sulje) {
System.out.println("Virhe tiedoston sulkemisessa");
}
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Että tämmönen.
Ei siinä pitäs vikkaa olla(ainakaan opinto monisteitten mukaan =) ).No seuraavaksi voisit avata luodun tiedoston millä tahansa tekstieditorilla. Onko tiedosto tyhjä, vai sisältääkö se "roskaa", eli serialisoidun olion?
Jos se sisältää olion (tai olioita), voisit kokeilla lukea olioita ilman castauksia. Eli tee metodi, joka lukee mitä tahansa olioita tiedostosta. Kokeilumielessä voit lukea kaikki tiedoston oliot ja tulostaa niiden luokat. Näin saat tietää mitä tiedostossa loppujen lopuksi on.
Ja tulosta exceptionit kokonaisuudessaan. Ei siis: catch(IOException luotallenna) {
System.out.println("Virhe tallennus tiedoston luomisessa");
}
vaan esim:
catch(IOException luotallenna) {
System.out.println("Tallennuksen konstruktorissa: " luotallenna.toString() " Virhe tallennus tiedoston luomisessa");
} - fani__
sss kirjoitti:
public static final long serialVersionUID = 42L;
-tämä kentäksi ni warning lähti mutta varsinainen ongelma jäi;
Toinenkin warningi:
warning: [unchecked] unchecked call to add(int,E) as a member of the raw type java.util.ArrayList
this.tapahtuu.get(koodi).add(kohta, uusi);
tämä tulee tällasesta paikasta:
//METODI LISÄÄ UUDEN TAPAHTUMAN MÄPPIIN
public void lisaaTapahtuma(String koodi, Tapahtuma uusi) {
//MERKITSEE LISTAN
ArrayList lista;
//TUTKITAAN ONKO PÄIVÄLLE JO TIETOJA(jos ei niin tallennetaan)
if(this.tapahtuu.get(koodi) == null) {
lista = new ArrayList();
lista.add(uusi);
this.tapahtuu.put(koodi, lista);
}
else {
//(jos on niin asetetaan tapahtumat tärkeysjärjestykseen)
int kohta = uusi.priorisoi();
if(uusi.priorisoi() > this.tapahtuu.get(koodi).size()) {
kohta--;
}
if(kohta < 0)
kohta = 0;
this.tapahtuu.get(koodi).add(kohta, uusi); //TÄSSÄ ON VAROITUS;
}
}
Tämä minun ymmärrykseni mukaan tarkoittaa että ArrayListiä ei ole luotu (pakosta) niin se luulee että se on tyhjä. Mutta kuten koodista näkee että Lista on olemassa jos mennään käskyn sisältävään if lauseeseen.
Jos meni *tuilleen niin ok.
Miten korjata, vai tarviiko edes?ArrayList temp = this.tapahtuu.get(koodi);
temp.add(kohta, uusi);
- sss
Ongelma löytyi! =)
Konstruktorissa olleet this.save = new...
this.load = new...
pitikin siirtää metodiensa (lataaTiedosto() , tallennaTiedosto() alle!)
Koko hommeli toimii ja mulla alkoi vihdoinkin kesäloma!!!
Jezzzz!
Ja kiiros kaikille vastanneille.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Persujen mukaan rasismi on huumoria
Vaan kun koomikko kutsui Halla-ahoa fasistiksi, niin piti haastaa oikeuteen. Mihin se huumorinitaju yhtäkkiä hävisi? ⠀1514763BOIKOTOIN - Ei mitään Suomi.fi postilaatikoita käyttöön
Ainakaan minulle! Vai että pitäisi alkaa siellä käyädä katselemassa tammikuusta 2026 siis periaatteessa päivittäin että2053984- 2123188
Lasse Lehtonen vaatii persuja pyytämään anteeksi aasialaisilta
Persut ova romahduttaneet Suomen maakuvan parissa päivässä negatiiviseksi rasismillaan ja se alkaa vaikuttamaan jo Suome1093049Hallitus on kaadettava ja Orpon on erottava
Mikään muu hallitus ei ole oman elämäni aikana tuhonnut näin paljon tämän maan taloutta ja työllisyyttä sekä suomen main842873- 1251720
HS 12/25 kysely: persut romahti, demarit raketoi
Kyyti on kylmää persuleirissä, saattaa vetää siellä silmätkin viirulleen. Sen sijaan SDP:n puoluetoimistolla voidaan pok121625- 611329
Aitolehti Capital
HehkuB on myynnissä, kovalla työllä saavutettu unelma joka sekin lässähti kuten kaikki mihin ryhtyy! Nyt Sewen asialle2471176MOT: Työmarkkinatori on olemattomien työpaikkojen hakupaikka
Työpaikkojen tietoja ei tarkisteta, ja ainakin noin noin 10% on olemattomia työpaikkoja ja sen lisäksi eri rekryfirmat t1491145