JAVA --- H71 thread= draad in het programma (pad) gewone applets = één thread, volgt één pad multithreading = er worden twee of meer paden gestart, die.

Slides:



Advertisements
Verwante presentaties
Hoofdstuk 14: Exception Handling JAVA -- H14.
Advertisements

Zelf objecten maken in VBA Ynte Jan Kuindersma, BIRD Automation Nationale Officedag 2009 EDE, 14 Oktober 2009.
SAP ABAP A short introduction. SAP ABAP • Selectie: – IF …… ENDIF. – IF …. ELSE … ENDIF. – IF …. ELSEIF …. ELSEIF …. ELSE …. ENDIF. – IF condition_1.
JAVA1 H 16. MULTITHREADING. 1. INLEIDING. Threads: delen van het programma die in concurrentie met elkaar gelijktijdig in executie gaan. Thread is een.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.
Van domeinklasse tot implementatie
MagentaPurpleTeal PinkOrangeBlue LimeBrown RedGreen Introductie C# /.NET
automatische garbage collection klein object georiënteerd betrouwbaar
Het type int Tekenen met Java operatoren
JAVA -- H101 Menu: enkel voor applicaties, niet voor applets soorten: hoofdmenu shortcut popupmenu MENU’S 1. Menu Hoofdmenu’s Shortcuts Popupmenu’s 2.
OOS Object geOrienteerd Software-ontwerp - 4 Codeerperikelen Singleton Specificeren Scheiding GUI en Domein Facade.
Klassen en objecten.
Omgevingen zijn dan geïmplementeerd als Symbol Tables. Symbol Table mapt een symbool met een Binding Meerdere noties van binding –Meerdere manieren te.
Computervaardigheden en Programmatie Universiteit AntwerpenObjecten 4.1 Computervaardigheden en Programmatie 1rste BAC Toegepaste Biologische Wetenschappen.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Hoofdstuk 2 Hallo, C# !.
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 8(2): Multi-processing.
Real-Time Systems (RTSYST) Week IPC inter process communication Shared variabele based (H5) Message based (H6) Kan ook gebruikt worden in systemen.
Opgave 1a: afronden int n=5; double a, b, c, d; a = n * 1.5; b = n * 3 / 2; c = n / 2 * 3; d = 3 / 2 * n; a b c d
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoorcollege 8 Game object structuren. Arrays in games Grid-gebaseerd speelveld (zoals Tetris) Lijst van spelers Lijst van inventory items Lijst van alle.
Hoorcollege 14 Vijanden, excepties. Wat zit allemaal in een level? Startpositie van de speler Waterdruppels Tiles Vijanden Einde van het level Achtergronden.
Hoofdstuk 8 Objecten en klassen.
Hoorcollege 7 Collections, arrays. Programma ‘Snowflakes’ Sneeuwvlok object.
JAVA -- H81 Exception: ongewone of foutieve situatie->prog. mislukt kan onderschept en afgehandeld worden. = een object van de klasse Throwable, gegenereerd.
Checked exceptions: FileNotFoundException, IOException, …
CONTROLESTRUCTUREN (DEEL 2)
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
JAVA1 H 1. KENNISMAKING MET JAVA EN DE ONTWIKKELOMGEVINGEN 1. ONTSTAANSGESCHIEDENIS VAN JAVA Java: ontworpen in 1990 door Sun Microsystems voor de programmering.
Oefeningen Hoofdstuk 3.
Algoritmiek Java GUIs, AWT en Swing API Overzicht te bestuderen stof, voorbeeldtentamen Hoorcollege 15 - Ma. 11 dec L.M. Bosveld-de Smet.
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
1 HOOFDSTUK 5 CONTROLESTRUCTUREN (DEEL 2) 5.1. INTRODUCTIE  Vervolg discussie omtrent gestructureerd programmeren  Introductie van de overblijvende controlestructuren.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Hoofdstuk 2 Java. Soorten Java-programma’s nJava Applet programma “leeft” op een WWW-pagina nJava Application programma heeft een eigen window nJavascript.
Hoofdstuk 9 Objecten en klassen.
Hoorcollege 9 Jewel Jam The revenge. Hierarchie van game objecten Game object (lijst) Game object (grid) Game object (lijst) Game object.
Java GUI nJava is platform-onafhankelijk nLook&feel past zich aan aan het platform new FileDialog(……).show();
Internetapplicaties - IV Collecties 1 Internetapplicaties Deel 4: Java hulpklassen: Collecties.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Hoofdstuk 10.1 Toepassing: Bitmap-editor. nKlik punten op scherm nPlaatje verschuiven left, right, up, down nPlaatje bewerken clear, invert, bold, outline.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoorcollege 5 Herhaling, game object interactie. Ball class class Ball { Texture2D colorRed, colorGreen, colorBlue; Texture2D currentColor; Vector2 position,
C++ C++ als een verbetering van C Abstracte datatypen met classes Constructoren en destructoren Subklassen binding van functies 1.
The beast has been released! 4 arcade-style games Interviews with famous people in the game industry Develop browsers games for any device (phone, tablet,
Inleiding tot programmeren
Overloading My name is overloading, cause we are many.
Constructoren Genesis 1:1 Aarde a1 = new Aarde(“Adam”, “Eva”);
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Datacommunicatie en netwerken
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Polymorphisme en Interfaces: inleiding
Hoofdstuk 3 Tekenen en rekenen.
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
Eigen klassen maken A new way of thinking.. Wat? Zie voorbeeld. Zie voorbeeld.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Objectgeoriënteerd Programmeren (2)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Overerving in Painter
Gameprogrammeren: Game Basics
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Gameprogrammeren: Klassen en objecten
Digitale beeldverwerking
Arjan Egges & Paul Bergervoet
Transcript van de presentatie:

JAVA --- H71 thread= draad in het programma (pad) gewone applets = één thread, volgt één pad multithreading = er worden twee of meer paden gestart, die schijnbaar tegelijk worden uitgevoerd = pseudo-simultaan uitvoeren van meerdere taken doel: het isoleren van taken hoe ?- een object aanmaken van de klasse Thread (gebruikmaken van de standaardklasse Thread) - een object door een thread laten sturen (gebruikmaken van de interface Runnable) THREADS

JAVA --- H72 THREADS – UITVOERING VOORBEELD

JAVA --- H73 public class Onafh_threads extends Applet {private Biljart biljart; private Bal bal; public void init() { biljart = new Biljart( getGraphics(), 50, 50, 320, 200 ); bal = new Bal( getGraphics(),10,getBackground(),biljart); } public void paint( Graphics g ) { biljart.teken(); bal.stuiter();} } THREADS -- VOORBEELD (1)

JAVA --- H74 class Biljart // package-toegankelijkheid {private Graphics g; private int links, boven, rechts, onder; Biljart( Graphics g, int links, int boven,int rechts, int onder ) {this.g = g; this.links = links;this.boven = boven; this.rechts = rechts;this.onder = onder; } THREADS -- VOORBEELD (2)

JAVA --- H75 int getLinks() { return links; } int getBoven() { return boven; } int getRechts() { return rechts; } int getOnder() { return onder; } THREADS -- VOORBEELD (3)

JAVA --- H76 void teken() {int breedte = rechts - links,hoogte = onder - boven; g.setColor( Color.black ); g.drawRect( links, boven, breedte, hoogte ); g.setColor( Color.green ); g.fillRect( links+1, boven+1, breedte-1, hoogte-1 ); } THREADS -- VOORBEELD (4)

JAVA --- H77 class Bal {private Graphics g;private int grootte, x, y, dx = 3,dy = 2; private Color wisKleur; private Biljart biljart; public Bal( Graphics g, int grootte, Color wisKleur, Biljart biljart ) { this.g = g; this.grootte = grootte;this.wisKleur = wisKleur; this.biljart = biljart; } THREADS -- VOORBEELD (5)

JAVA --- H78 public void teken( Color kleur ) { g.setColor( kleur );g.fillOval( x, y, grootte, grootte );} public void verplaats() {if( x + dx <= biljart.getLinks() || x + dx + grootte >= biljart.getRechts() ) { dx = -dx;} if( y + dy <= biljart.getBoven() || y + dy + grootte >= biljart.getOnder() ) { dy = -dy;} x += dx;y += dy;} THREADS -- VOORBEELD (6)

JAVA --- H79 public void stuiter() { x = biljart.getLinks() + 1;y = biljart.getBoven() + 1; while( true ) { teken( Color.red );slaap( 10 ); teken( wisKleur );verplaats(); } public void slaap( int millisec ) {try { Thread.sleep( millisec ); } // static methode !! catch( InterruptedException e ) {} } THREADS -- VOORBEELD (7)

JAVA --- H710 Opmerkingen: de grafische context wordt via de constructor doorgegeven aan de klassen Biljart en Bal, zodat je deze in alle methoden kan gebruiken via getGraphics() kan de grafische context opgevraagd worden de applet stopt niet! de applet reageert niet op events (bijv. klikken op een button) ! THREADS -- VOORBEELD

JAVA --- H711 Niet verwarren met start() en stop() van Applet!! Oplossingen(1): om events op te vangen maken we een tweede thread hiervoor gebruiken we volgende methoden:  Thread(): de constructor  void start(): een thread starten  void stop(): een thread stoppen  void run(): doet het eigenlijke werk; herdefiniëren! Wordt automatisch aangeroepen door de start()- methode!! THREADS -- EVENTAFHANDELING

JAVA --- H712 Oplossingen (2):  void sleep(): laat de thread slapen (in milliseconden), een andere thread kan nu zijn werk uitvoeren (Not Runnable)  void suspend(): het runnen van de thread onderbreken (Not Runnable)  void resume(): de onderbreking ongedaan maken (Runnable) THREADS -- EVENTAFHANDELING

JAVA --- H713 Levenscyclus van een Thread: THREADS -- LEVENSCYCLUS

JAVA --- H714 Oplossingen: om de applet te doen stoppen als de pagina verlaten wordt en daarna opnieuw te starten :  Invoegen van een start() - en stop() -methode:  start(): wordt automatisch aangeroepen na het uitvoeren van de methode init() of bij het terug vergroten van het venster (na verkleining tot icoon)  stop(): wordt automatisch aangeroepen bij het verlaten van de web-pagina met de applet of bij het verkleinen tot icoon THREADS – STOPPEN VAN APPLET

JAVA --- H715 Reageren op events:  invoeren van een tweede thread eerste thread: reageren op muisevents (hoofdthread) tweede thread: beweging van biljartbal over scherm  klasse Thread gebruiken als basisklasse voor de klasse Bal -> het balletje loopt in een eigen thread THREADS

JAVA --- H716 Bijkomende nuttige methoden: static-methode currentThread(): om na te gaan welke thread momenteel aan het werk is isAlive(): geeft true indien de thread gestart en nog niet gestopt is; kan dus zowel Runnable als Not Runnable zijn THREADS

JAVA --- H717 public class Onafh_threads extends Applet implements ActionListener { private Biljart biljart; private Bal bal; private Button startKnop, pauzeKnop, gadoorKnop, stopKnop; public void init() { biljart = new Biljart( getGraphics(), 50, 50, 320, 200 ); startKnop = new Button( "Start" );pauzeKnop = new Button( "Pauze" ); gadoorKnop = new Button( "Ga door" );stopKnop = new Button( "Stop" ); add( startKnop ); startKnop.addActionListener(this); add( pauzeKnop ); pauzeKnop.addActionListener(this); add( gadoorKnop ); gadoorKnop.addActionListener(this); add( stopKnop ); stopKnop.addActionListener(this); } THREADS – AANGEPAST VOORBEELD (1)

JAVA --- H718 public void start() {if( bal == null ) { bal = new Bal( getGraphics(), 10, getBackground(), biljart ); bal.start(); // de thread starten } public void stop() {if( bal != null ) // of if (bal.isAlive()) { bal.stop(); // de thread stopzetten bal = null; } THREADS – AANGEPAST VOORBEELD (2)

JAVA --- H719 public void paint( Graphics g ) {biljart.teken(); } public void actionPerformed( ActionEvent e) {if( e.getSource() == startKnop ) { if( bal == null ) { // hetzelfde als wanneer de applet wordt gestart bal = new Bal( getGraphics(), 10, getBackground(), biljart ); bal.start(); // de thread starten -> run() } THREADS – AANGEPAST VOORBEELD (3)

JAVA --- H720 if( e.getSource() == pauzeKnop ) if(bal != null ) bal.suspend(); // onderbreking if( e.getSource() == gadoorKnop ) if( bal != null ) bal.resume(); // hervatting if ( e.getSource() == stopKnop ) { if( bal != null ) { // run() wordt drastisch onderbroken bal.stop(); // de thread gaat dood bal = null; // de bal is niet meer in leven } THREADS – AANGEPAST VOORBEELD (4)

JAVA --- H721 Wijzigingen in de klasse Bal: class Bal extends Thread { //..... De functie stuiter() wordt nu de functie run()!! In de functie slaap(), gebruiken we de gewone functie sleep() uit de klasse Thread, want het balletje is zelf ook een Thread ! } THREADS – AANGEPAST VOORBEELD (5)

JAVA --- H722 THREADS - tweede mogelijkheid Thread aanmaken als subklasse van Thread doch:  soms problemen wegens enkelvoudige overerving  mogelijke oplossing: opsplitsen in twee klassen! Voorbeeld: een applet, die herhaaldelijk geluid afspeelt door middel van au-files -> extends Applet!

JAVA --- H723 THREADS - VOORBEELD (1) import java.applet.*; import java.awt.*; import java.net.*; // nodig voor URL public class Audio extends Applet {ThrGeluid thr; public void start() { URL url = getDocumentBase(); thr = new ThrGeluid(); thr.ac = getAudioClip(url,"Hi.au"); thr.start(); }

JAVA --- H724 THREADS - VOORBEELD (2) public void stop() {thr.stop(); } public void paint(Graphics g) {g.drawString("Als de file hi.au in de huidige directory",10,30); g.drawString("staat, wordt nu geluid geproduceerd!",10,50); }

JAVA --- H725 THREADS - VOORBEELD (3) class ThrGeluid extends Thread { AudioClip ac; public void run() {for (;;) {ac.play(); try { Thread.sleep(1000); } catch (InterruptedException e) {} } } // geen constructor -> default-constructor }

JAVA --- H726 THREADS -- RUNNABLE-INTERFACE  voorgestelde oplossing is niet ideaal !!  door gebruik te maken van de interface Runnable, kan alles opnieuw via één klasse  enkel implementatie van de run-methode en expliciet een object aanmaken van de klasse Thread: thr = new Thread(this); waarbij this het object is, dat nu door een thread wordt gestuurd, m.a.w. het object zelf is nu GEEN thread!

JAVA --- H727 THREADS -- RUNNABLE-INTERFACE Aangepast voorbeeld: public class Audio extends Applet implements Runnable { Thread thr; AudioClip ac; public void init() { URL url = getDocumentBase(); ac = getAudioClip(url,"Hi.au"); } public void start() { thr = new Thread(this); thr.start(); }

JAVA --- H728 THREADS -- RUNNABLE-INTERFACE public void stop() {thr.stop(); } public void run() { for (;;) {ac.play(); try { Thread.sleep(1000); } catch (InterruptedException e) {} } } public void paint(Graphics g) {g.drawString("Als de file hi.au in de huidige directory",10,30); g.drawString("staat, wordt nu geluid geproduceerd!",10,50);} }

JAVA --- H729 THREADS -- UITVOERING TOEPASSING

JAVA --- H730 THREADS -- VOORBEELD: DE KLOK class Timer extends Thread {private Aanvrager aanvrager; // de klok private int interval; // 1000 milliseconden = 1 seconde public Timer( Aanvrager aanvrager, int interval ) {this.aanvrager = aanvrager; this.interval = interval; }

JAVA --- H731 THREADS -- VOORBEELD: DE KLOK public void run() {while( true ) { // wachten tot het interval voorbij is try { sleep( interval ); } catch( InterruptedException e ) {} // naar de aanvrager een bericht sturen aanvrager.tik(); }

JAVA --- H732 THREADS -- VOORBEELD: DE KLOK interface Aanvrager { public void tik(); }

JAVA --- H733 THREADS -- VOORBEELD: DE KLOK import java.util.*;// voor Date en Calendar class Klok extends Canvas implements Aanvrager { private int seconden, minuten, uren;private int uurTovGMT; private boolean timerLoopt = false; final double tweePi = 2 * Math.PI; final double halfPi = Math.PI / 2; public Klok( int uurTovGMT ) // uurTovGMT = aantal uren verschil //tussen de tijd op deze plaats op aarde en Greenwich Mean Time { this.uurTovGMT = uurTovGMT; Timer timer = new Timer( this, 1000 ); timer.start(); }

JAVA --- H734 THREADS -- VOORBEELD: DE KLOK public void paint( Graphics g ) {if( timerLoopt ) { // Bereken de hoeken van de wijzers double secondenHoek = halfPi - tweePi * seconden / 60; double minutenHoek = halfPi - tweePi * minuten / 60; double urenHoek = halfPi - tweePi * uren / 12 – tweePi / 12 * minuten / 60; // Teken de klok g.translate( 175, 150 );

JAVA --- H735 THREADS -- VOORBEELD: DE KLOK g.setColor( Color.cyan ); g.drawOval( -100, -100, 200, 200 ); g.setColor( Color.blue ); g.drawOval( -99, -99, 198, 198 ); // Teken de stippen op de klok g.fillOval( -4, -4, 9, 9 ); for( int u = 0; u < 12; u++ ) { double stipHoek = tweePi * u / 12; if( u % 3 == 0 ) {g.setColor( Color.cyan ); g.fillOval( (int) ( 90 * Math.cos( stipHoek ) - 3 ), (int) ( -90 * Math.sin( stipHoek ) - 3 ), 5, 5 ); }

JAVA --- H736 THREADS -- VOORBEELD: DE KLOK else {g.setColor( Color.darkGray ); g.fillOval( (int) ( 90 * Math.cos( stipHoek ) - 2 ), (int) ( -90 * Math.sin( stipHoek ) - 2 ), 4, 4 ); }

JAVA --- H737 THREADS -- VOORBEELD: DE KLOK // Teken de wijzers g.setColor( Color.blue ); g.drawLine( 0, 0, (int) (55 * Math.cos( urenHoek ) ), (int) ( -55 * Math.sin( urenHoek ) ) ); g.drawLine( 0, 0, 0 + (int) ( 80 * Math.cos( minutenHoek )), (int) ( -80 * Math.sin( minutenHoek ) ) ); g.drawLine( 0, 0, 0 + (int) ( 95 * Math.cos( secondenHoek )), (int) ( -95 * Math.sin( secondenHoek ) ) ); }

JAVA --- H738 THREADS -- VOORBEELD: DE KLOK public void tik() {Date date = new Date(); Calendar calendar = new GregorianCalendar( new SimpleTimeZone(uurTovGMT*60*60*1000,null)); seconden = calendar.get(Calendar.SECOND); minuten = calendar.get(Calendar.MINUTE); uren = calendar.get(Calendar.HOUR); timerLoopt = true; repaint(); }

JAVA --- H739 THREADS -- VOORBEELD: DE KLOK public class AnalogeKlok extends Applet {private Klok klok; public void init() {setLayout( new BorderLayout() ); klok = new Klok( 1 ); add( "Center", klok ); }

JAVA --- H740 THREADS -- Dubbelbuffering Om flikkering bij animatie te voorkomen, kan men het scherm in de achtergrond opbouwen en het dan in zijn geheel tonen! Voorbeeld: twee bolletjes die bewegen in de wereld (= grid) private Image offscreenImage; // dubbel buffering private Graphics offscreenGraphics;//Graphics context //Herdefinitie van update uit Canvas Class, maar nu //zonder de achtergrond schoon te maken public void update( Graphics g ) { // doe geen background erase paint( g ); }

JAVA --- H741 THREADS -- Dubbelbuffering //Herdefinitie van paint uit Canvas Class, maar nu met //dubbelbuffering public void paint( Graphics g ) { if( offscreenGraphics == null ) { offscreenImage = createImage( breedte, hoogte ); offscreenGraphics = offscreenImage.getGraphics(); } // maak het scherm schoon offscreenGraphics.setColor( Color.cyan ); offscreenGraphics.fillRect( 0, 0, breedte, hoogte ); //bepaal de kleur van de buitenrand en teken de rand offscreenGraphics.setColor( rand ? Color.red : Color.yellow );

JAVA --- H742 THREADS -- Dubbelbuffering for( int i = 0; i < GROOTTE; i++ ) offscreenGraphics.drawRect( i, i, breedte - i * 2, hoogte - i * 2 ); // teken de "grid" offscreenGraphics.setColor( Color.black ); for( int i = GROOTTE; i < breedte - GROOTTE; i += GROOTTE ) offscreenGraphics.drawLine( i, GROOTTE, i, hoogte-GROOTTE ); for( int i = GROOTTE; i < hoogte - GROOTTE; i += GROOTTE ) offscreenGraphics.drawLine( GROOTTE, i, breedte-GROOTTE,i ); // teken de bolletjes bolB.tekenen( offscreenGraphics ); bolW.tekenen( offscreenGraphics ); // en teken nu dan alles in het echt g.drawImage( offscreenImage, 0, 0, null ); }