Indholdsfortegnelse:
Video: Como usar Butter Knife en Eventos - Inyeccion de Dependencias 04 2025
Ordet begivenhed fremkalder alle slags billeder. For en nonprogrammer er en begivenhed bare "noget der sker. "Hvis du er vant til at håndtere vinduer og rammer i Java, så tænker du sandsynligvis på en begivenhed som en begivenhed, der vækker et stykke kode. For eksempel vågner en brugers museklik eller tastetryk den kode, der angiver en indstilling, og viser en OK-boks. Selve klik eller tastetryk kaldes en begivenhed , fordi det sker uafhængigt af det kørende program. Kun brugeren ved, hvornår han eller hun vil trykke på knappen. Og når knappen trykkes, vågner en del af Java-programmet lige op og håndterer situationen. Dette scenario kaldes hændelsesdrevet programmering .
Hændelsesdrevet programmering
SAX-programmer er hændelsesdrevne . For eksempel kommer du ind i sengen for en god nats søvn. Du kommer over for at indstille din vækkeur og derefter slå sig ned, lukke øjnene og blive bevidstløs i et antal timer. Så sker der en vigtig begivenhed: En bestemt tid på dagen ankommer. Når arrangementet finder sted, går vækkeuret i sin "wake up" -tilstand - og gør en forfærdelig dukke til at røre dig ud af din rolige søvn.
Her er et andet scenario. Du er en travl executive, og du vil være ude i flere timer, men du vil ikke gå glip af nogen vigtig forretning. Før du forlader kontoret, fortæller du din assistent: "Ring til mig, hvis noget vigtigt kommer op. "Udstedelse af denne ordre er beslægtet med at indstille vækkeuret. Du fortæller din assistent (dit vækkeur) for at vække dig op, hvis en begivenhed finder sted. Gør denne anmodning til din assistent (eller til din vækkeur) kaldes registrering . I begge scenarier registrerer du dig selv med en wakeup service. Når du har registreret, kan du forfølge din afslappede ikke-aktivitet, ignorere alle rigtige forretninger, indtil der sker en begivenhed. Så …
Ring, ring. Din mobiltelefon er hollering på dig. "Hej? ”
”Hej. Dette er din assistent. Jeg har salgstal for første kvartal. De er 1 million, 4 millioner og 2 millioner. "
" Lad os se. Det er i alt 7 millioner, "siger du. "Jeg noterer det på min PalmPilot. Tak. "Du hænger op.
Flere øjeblikke får du et andet opkald. "Præsidenten for Big Bucks, Inc., ønsker at lukke denne aftale. De taler 10 millioner dollars. ”
"Hmm," svarer du. "Det vil bringe vores årlige omsætning op til 17 megabukker. Jeg gemmer disse oplysninger i min regnearksapplikation. Tak for at kalde. "
Hver af disse interaktioner kaldes en tilbagekaldelse .Tidligere på dagen, da du registrerede dit ønske med assistenten, anmodede du om tilbagekald. Så når en begivenhed finder sted, gør assistenten en tilbagekald for at give dig besked om begivenheden. I Java-programmeringsbetingelser kalder assistenten en af dine mange metoder (et af dine Java-underprogrammer).
Kernen i hændelsesdrevet programmering
Hændelsesdrevet programmering har tre dele:
- Registrering: Du registrerer dit ønske om at blive underrettet, når en begivenhed opstår. Du registrerer dette ønske med et andet stykke kode - et andet objekt, normalt noget du har importeret (som et stykke kode, der er en del af en andens API). Dette objekt ser derefter bagfra scenerne for forekomsten af den begivenhed, du har angivet.
- Begivenhedshændelse: Der sker en specifik begivenhed.
- Tilbagekald: Det andet stykke kode udfører en tilbagekaldelse. En af dine metoder bliver kaldt.
To typer af kode
At skelne mellem aktiv kode og passiv kode er nyttig:
- Aktiv kode har en hovedmetode. Aktiv kode, når den begynder at køre, tager det centrale trin. Aktiv kode indeholder tråden af eksekvering, der styrer hele boldspil.
- Passiv kode sidder bare der og venter på at blive kaldt. En passiv terningsklasse gør ingenting før nogle andre kodeopkald terninger. rulle().
Nu tror du måske, at passiv kode er alt hvad du behøver for hændelsesdrevet programmering, men det er det ikke. For begivenhedshåndtering har du brug for dette registreringsstrin. Den passive kode begynder ved at blive registreret med et andet stykke kode.
Tænk på et eksempel fra mus, vinduer og knapper på skærmens verden for at fastslå denne forestillingsside. Du opretter et vindue eller en ramme. Du vil have din ramme til at reagere på museklik, så du udsteder følgende kommando:
-knappen. addMouseListener (dette);
Denne kommando registrerer din ramme med knappen. Kommandoen siger i virkeligheden Når en mushændelse sker, skal du ringe til en af rammens mushåndteringsmetoder . Senere, når brugeren klikker på musen, får rammen et tilbagekald. Computeren kalder rammens mouseClicked metode.
SAX events
Visst, SAX er eventdrevet, men det betyder ikke, at et SAX-program venter på museklik. I stedet følger SAX-koden den register-event-callback-model, der er beskrevet i de sidste flere afsnit. Hvert SAX-program har to uundværlige stykker kode:
- Et stykke kode, du skriver - kaldet handler . (Din håndterer kan udvide en forudskrevet DefaultHandler-klasse.) Handleren er som million dollar-direktøren i det foregående afsnit.
- Et stykke kode, som du normalt ikke skriver - parser . Parseren spiller en rolle som eksekutivets assistent. Java 1. 4 API har en indbygget parser. Du opretter et eksempel af denne parser, og derefter registrerer du din håndterer med den parser-forekomst. I virkeligheden fortæller du eksemplet at ringe til din handler, når en begivenhed finder sted.
Alt hvad der skal gøres med XML er nyt, og er stadig i en tilstand af flux. På grund af dette er terminologien patched sammen på nogle ejendommelige måder. Under udvikling af SAX version 2 havde nogle techies en make-up-new-names festival. Hvad der normalt kaldes en "parser" er indeholdt i en Java-grænseflade, der hedder XMLReader. Der plejede at være en klasse ved navn org. xml. sax. Parser, men klassen blev udskrevet (hvilket betyder at du skal skrabe det ud af bunden af din sko). For at gøre tingene lidt mere komplicerede, er der stadig et andet parsningsværktøj, javax. xml. parsere. SAXParser. Du bruger denne SAXParser til at lave dig selv en XMLReader. Med held og lykke bliver du hurtigt vant til denne forfærdelige terminologi. For nu skal du huske at det, der kaldes en "parser", er normalt en forekomst af XMLReader.
Registret og tilbagekaldscenariot er det, der gør SAX event-driven. Nu er det sjovt, en SAX-begivenhed er ikke håndgribelig. En SAX-begivenhed minder dig ikke om et tastetryk eller en klik på knappen. I SAX scanner parseren et XML-dokument fra top til bund. Når parseren møder noget interessant, brænder parseren af en begivenhed og kalder håndtereren. Så er det op til handleren at gøre noget ved dette interessante møde.