11. december 2002 - 18:42Der er
12 kommentarer og 1 løsning
ObserverPattern Eks. - Simpelt spørgsmål!!
Hej, jeg har lavet et lille eksempel med brug af Observer Patterne, for at få en forståelse af det. Det benytter disse klasser:
StartApp.java - Starter programmet med at indlæse en int. ObserverIF.java -Interface, giver Frame1 besked! Sale.java - indeholder variabel og instans af interfacet Frame1.java - Viser indhold af int total fra Sale-klassen
Problemet er at jeg får følgende fejl, når jeg indlæser et tal:
Exception in thread "main" java.lang.NullPointerException at Sale.publishPropertyEvent(Sale.java:13) at Sale.setTotal(Sale.java:19) at StartApp.main(StartApp.java:13) Press any key to continue...
Herunder er klasserne: ---------------------------------------------------------- import java.io.*; public class StartApp { public static void main(String[]args) throws IOException { Sale s = new Sale(); int variabel = 1;
InputStreamReader tegnLaeser = new InputStreamReader(System.in); BufferedReader ind = new BufferedReader(tegnLaeser);
---------------------------------------------------------- public interface ObserverIF { public void notify(int o); } ---------------------------------------------------------- public class Sale { ObserverIF of; int total = 4;
public Sale() { }
public void publishPropertyEvent(int total) { of.notify(total); }
public class Frame1 extends JFrame implements ObserverIF { BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel1 = new JPanel(); JLabel jLabel1 = new JLabel(); JLabel jLabel2 = new JLabel();
I et inbound callcenter, hvor identiteten på den, der ringer ind, skal bekræftes, kan kontrollen nu foregå i telefonkøen. Det understøtter fem centrale KPI'er for callcentre.
public class StartApp implements ObserverIF { public static void main(String[]args) throws IOException { Sale s = new Sale(); s.register(new StartApp()); int variabel = 1;
InputStreamReader tegnLaeser = new InputStreamReader(System.in); BufferedReader ind = new BufferedReader(tegnLaeser);
Tak....men er det ikke netop det primære med observer, at eks. en masse frames skal kunne obdatere deres label's når der sker en hændelse?? Jeg prøver lige med det du foreslår. Ideen, ved programmet er sådan set bare, at lave det aller mest simple Observer eksempel (for at kunne forstå princippet i det). Tak for links ;)
Ja der er jo ikke meget sjov ved at fortælle main, hvad main lige selv har sendt.
Det var bare for at gøre det simpelt.
Naturligvis skal du have din Frame åbnet og have den notifyet.
Men jeg ville ikke rode mig ud i noget GUI, når jeg kunne illustrere simplere v.h.a. StartApp.
PS: Hvis du skal notifiet flere frames, så skal du have mulighed for flere observers f.eks. via en ArrayList (det er i de eksempler jeg linkede til - de har også mulighed for at afregistrere en observer).
Ok..dvs. at man skal bruge arrayList el. hvis man vil notify'e flere frames??
Jeg forstår ikke helt hvad "s.register(new StartApp());" gør??? register metoden tager da en int eller hva?? ikke i dit tilfælde vel?? Men dit lille eksempel virker ;)
Hele ideen er: objekt A, B og C skal vide når variable x ændrer sig i objekt X A, B og C kalder derfor register i X med sig selv som argument X gemmer dem i en ArrayList når x så bliver ændret ser X i sin ArrayList hvem der skal notifies
register skal kaldes med et objekt der implementerer ObserverIF !
Tak for hjælpen...jeg har fået det til at virke sådan at, hver gang jeg skriver noget i dos-vinduet, så bliver det opdateret på min frame, så må jeg se hvordan jeg kan få flere frames til at virke med ArrayList ;)
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.