Første
Objekt kommunikation serie, Planche nr. 25
Kursus Indhold

Udskrift af : Objekt kommunikation

Planche 1 : Objekt kommunikation

Java-objekter kommunikerer på 3 måder:

Planche 2 : Hændelser ("Events")

Hændelser er metoder, der udføres som en del af den forventede afvikling af programmer, på tidspunkter der ikke kan fastsættes. Eksempel:

Planche 3 : 2 modeller

Planche 4 : Eventmodel 1.0

    public bolean HandleEvent (Event e) {
      ... kig på e, for at se, om det var en hændelse du kan bruge
      return true ; // hvis du har "brugt" eventet
      ..
      return false ; // hvis du ikke har "brugt" eventet
}
Det var den model, der blev brugt i Java Intro kurset.

Planche 5 : Begrænsninger

Man bør ikke anvende model 1.0 fordi: (Det var derfor, at det var vores applet-udvidede klasse, der skulle håndtere alle mulige action() og derefter sortere dem.)

Planche 6 : Eventmodel 1.1

Der er to dele i eventmodel 1.1 De sammenkædes, ved at lytteren registrerer sig for at modtage en speciel hændelse.

Planche 7 : Event klasser

Planche 8 : Implementer V.1.1

Planche 9 : Eksempel - Trin 1

Kig i java.awt.event og find en passende klasse:
  • ActionEvent
  • AdjustmentEvent
  • ComponentAdapter
  • ComponentEvent
  • ContainerAdapter
  • ContainerEvent
  • FocusAdapter
  • FocusEvent
  • InputEvent
  • ItemEvent
  • KeyAdapter
  • KeyEvent
  • MouseAdapter
  • MouseEvent
  • MouseMotionAdapter
  • PaintEvent
  • TextEvent
  • WindowAdapter
  • WindowEvent
  • Se nærmere i pakke-dokumentationen

    Planche 10 : Eksempel - trin 1 (fortsat)

    Klasserne implementeres v.h.a følgende interface-klasser:
         ActionListener 
         AdjustmentListener 
         ComponentListener 
         ContainerListener 
         FocusListener 
         ItemListener 
         KeyListener 
         MouseListener 
         MouseMotionListener 
         TextListener 
         WindowListener 
    

    De mest interessante er:

    Planche 11 : Eksempel: Trin 2

    Implementer interface.

    2 måder:

    Planche 12 : Eksempel: Trin 2 (fortsat)

    Interface ActionListener har en metode, actionPerformed()

    Hvis klassen selv er lytter (et event pr klasse)

    java.awt.event.*;
    
    class MinApplet extends java.applet.Applet implements ActionListener {
    	
    	// øvrige kode...
    
    	public void actionPerformed(ActionEvent e) {
    		// behandling af aktions event
    	}
    
    	// øvrige kode
    }
    

    Hvis man opretter en særlig lytter-klasse

    java.awt.event.*;
    
    class MinApplet extends java.applet.Applet {
    	
    	// øvrige kode...
    
            class MinActionListener implements ActionListener {
              Lokalhenvisning h;
              
    	  MinActionListener(Lokalhenvisning h) {
    	    // konstruktør
                this.h = h ;
              } 
    
    	  public void actionPerformed(ActionEvent e) {
    		// behandling af aktions-hændelse
    	  }
    	}
    	// øvrige kode
    }
    

    Planche 13 : Eksempel: Trin 3

    Registrer lytteren:

    Planche 14 : Eksempel: Trin 3 (fortsat)

    Registrer ActionListener:

    Planche 15 : Fra 1.0 til 1.1:

    Chekliste: Javac og kryds fingrene... :-)

    Planche 16 : Opgave 5

    Kopier opgave 4 fra java intro over til ny folder (JavaOpg5) og konverter fra 1.0 til 1.1

    Brug eventuelt GUIApp-klassen fra Intro-kursets løsningsforslag

    på en side.

    (Gå til afsnittet om Swing - resten køres før File IO)

    Planche 17 : Undtagelser ("Exceptions")

    Undtagelser er hændelser, der indtræffer på grund af uventede begivenheder.

    Planche 18 : Fejlhåndtering

    int status = metodeDerNæstenVirker();
    
    if (status == SÆR_RETUR_KODE) {
    	// gør noget ved det
        switch(Fejlindikator) {
    		// håndter mere specifik kode
    	}
    } else {
    	// alt i orden - fortsæt normalt
            ..
    }
    

    try {
    	metodenDerNæstenVirker();
        } catch {
    	// metoden fejlede - gør noget!
        }
        // fortsæt normal kode...
    

    Planche 19 : Javaundtagelser (klasser)

    Undtagelsesklasser stammer alle fra Og de fleste findes i java.lang.*

    Men man kan oprette sine egne...

    Planche 20 : Kastes?

    Planche 21 : Manglende Undtagelser

    Hvis man mangler at implementer en undtagelse, vil compileren gøre opmærksom på det og nægte at danne kode!

    Planche 22 : Implementer undtagelser

    Håndter undtagelser ved

    Ryd evt. op med

    (Finally udføres altid - både efter undtagelser og normal proces)

    Planche 23 : Syntaks

    try {
    	// sætninger, der skal beskyttes
    }
    catch ( Liste af undtagelsesvariable ) {
    
    	// sætninger, der redder fejl
    
    }
    
    // alm. sætninger, udføres hvis det gik godt.
    
    

    Der kan være flere catch-blokket efter hinanden på den samme try

    Eksempel på undtagelsesvariabelerklæring: Exception e

    Planche 24 : Send videre

    Undtagelser kan skabes fra kode

    Planche 25 : Klasse signatur