23. maj 2001 - 16:28Der er
15 kommentarer og 2 løsninger
ItemListener, itemStateChanged
Jeg har tilføjet 2 JComboBox til et view -- ændringer i combo boxene dvs. valg af item bliver reflekteret i en 2 attributter i en model. Attributterne er henholdsvis produktType og produktType2.
Koden for de to itemStateChanged...
void jcbMaxKredit_itemStateChanged(ItemEvent e) {
ProduktType p = (ProduktType) jcbMaxKredit.getSelectedItem(); model.getAftale().setProdukttype(p); }
Koden er lidt forskellig, men der er for at teste på performance.
Imidlertid er jeg havnet i den uheldige situation, at at når der indtræffer events i den ene combo box, bliver begge attributter i modellen opdateret. Dvs. ændringer til jcbMaxKredit sætter både produktType og produktType2. Jeg har testet set og get metoderne, og de sætter de rigtige attributter.
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
Det vil normalt ikke være muligt det du beskriver, så jeg bliver lidt i tvivl om du ved et uheld har fået forkerte referencer det forkerte sted hen (ala jcbMaxKredit = jcbMaxLaan), for så ville det være det samme.
Tag getSource() fra dit event, og se om de kommer fra samme komponent.
variablene kc og lc er counters. Jeg kan se at når jeg ændre i combo boxen jcbMaxKredit bliver jcbMaxKredit_itemStateChanged kaldt og kun den.
når jeg ændre i combo boxen jcbMaxLaan bliver jcbMaxLaan_itemStateChanged kaldt og kun den.
Dvs. hver combo box genererer et specifikt event. Jeg skriver mit event object ud, og kan se at det er det rigtige item i den rigtige combo box der bliver valgt.
Hvis du så stadig får sat både produkttype og produkttype2 hvergang, må dine problemer ligge i dit aftaleobject. (Jeg mener, metoderne ovenfor siger du selv er ok).
Jamen, har du kigget på hvor de metoder bliver kaldt fra?
Du kan evt. (hvis du er tilfreds med system.out) lave en:
Thread.currentThread().dumpStack();
Så får du en exception udskrevet på skærmen med et stack trace, om hvilke metoder, der har kaldt hvilke. De burde jo i princippet være isoleret, i forhold til dit oprindelige problem, men.
Jamen, prøvede du at kigge på et stacktrace, fordi med de to kodestumper, du har leveret er der ingen fejl...?
Og et spørgsmål i forbindelse med dine produktklasser. Jeg kender selvfølgelig ikke BizObjReference objekter, men du opretter to på nøjagtig samme måde. Hvis det er en wrapper over for et andet lag, kan man spekulere på om de to new metoder rent faktisk relaterer til det samme på det bagved liggende system. Er det to unikke objekter med separat lager, og hvis de refererer til bagvedliggende objekter er disse så fælles eller en ren deep copy.
Jeg kan godt foranledes til at tro noget omkring det sidste. Et tilsvarende problem har jeg nemlig haft tidligere.
logical>> Nu må jeg rødmende erkende at jeg ikke er helt stiv i det med stack trace :( jeg burde nok have lært at gå før jeg begyndte at løbe, men sådan skulle det ikke være.
En white box test har afsløret at metoderne bliver kaldt som de skal, data bliver hentet fra GUI\'en som de skal, de havner nogen gange rigtigt i datamodellen, men bliver altid gemt forkert i databasen. Derfor blev jeg nødt til at undersøge JFrameworket (desværre nåede jeg ikke at se dit svar 10:38)
Da min datamodel nedarver fra en BizObj model, der både er i stand til at reflektere simple attributter, men også en til mange relationer vha. containere, var det selvfølgelig oplagt at undersøge om frameworket \'havde noget imod\' at to referencer blev \'hardcoded\' istedet for at blive repræsenteret som en container.
Det viste sig at når man gør det fortolker JFrameworket det fejlagtigt, og sætter den første reference til at pege på sidste references \'lager rum\'. Hvis man vil have mere end en reference til den samme type objekt er man altså nødt til at bruge en container.
Grundet \'samtidigheds problemer\' i vores ideer håber jeg det er ok vi deler?
Fint for mig, jeg har bare det, at jeg hader problemer, og jeg vil løse dem.
Det har givet mig en del øvelse med tiden, så det plus stor viden om java giver ret gode muligheder for at identificere problemer.
De største \"hurdles\", jeg arbejder med, er fejl i application servere og race conditions i flertrådssystemer. Der er det lidt sværere at finde fejl :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.