Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Relevanta dokument
Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Concurrency Saker händer samtidigt. Process En instans av ett program

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

OOP Objekt-orienterad programmering

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Fördjupad Java. Undantagshantering. Fel

10 Kommunikation i Java

Klassen javax.swing.timer

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Att skriva till och läsa från terminalfönstret

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Föreläsnings 9 - Exceptions, I/O

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Tentamen Nätverksprogrammering Lösningsförslag

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Input. Programmering. Andra källor

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

Språkkonventioner och redigering av tal.

Kopiering av objekt i Java

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Klasser som datastrukturer

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Laborationer, moment 4 5

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Laborationer, moment 4 5

Länkade strukturer, parametriserade typer och undantag

F4. programmeringsteknik och Matlab

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 14. Filhantering

Trådar. Aktiva objekt

Parallellism, återblick

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

1 Comparator & Comparable

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 3. Stack

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Föreläsning 5 Meddelandesändning med TCP

Java TRÅDAR OCH GRAFIK. FAdil galjić

Testning av program. Verklig modell för programutveckling

F8 Meddelandesändning med UDP

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Ingenjörsfirman Stéen Java Sida 1 av 1

F5 Meddelandesändning med TCP

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 3. Stack

Föreläsning 1, vecka 8: Att förbereda sig för tentan

9 Aktiva objekt och trådar

Trådar. Motivering. Många program måste kunna hålla på med flera saker samtidigt, till exempel. fleranvändarsystem.

Föreläsnings 10 - Överlagring, Konstruerare, Arv, Mer Exceptions, Reguljära Uttryck

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

Testning och felhantering

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

F2 Java I/O - strömmar Meddelandesändning med TCP

Tentamen Nätverksprogrammering Lösningsförslag

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Lösningar för tenta 2 DAT043,

Felsökning, UML. Översikt. Java starkt typat. Typomvandling (casting) Exempelhierarki. Stark typning

Exam Concurrent and Real-Time Programming

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Tentamen Nätverksprogrammering Lösningsförslag

trafiksimulering Intro OU5 trafiksimulering

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

C++ Objektorientering - Klasser. Eric Elfving

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Java Secure Sockets Extension JSSE. F5 Secure Sockets EDA095 Nätverksprogrammering! Roger Henriksson Datavetenskap Lunds universitet

Objektorienterad programmering

Föreläsning 5 Meddelandesändning med TCP

Transkript:

DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/4 2014 Innehåll Kort om Javas Exceptions Trådar i Java swing- klassen Timer Klient-Server-program Javas Exceptions Checked måste hanteras, programmet kan fortsätta t.ex. IOException FileNotFoundException Unchecked får hanteras t.ex. RuntimeException NumberFormatException NullPointerException Hantera ett fel Fånga felet med try... catch eller Kasta felet vidare med throws Felen utgör en klasshierarki... Fånga fel try { // code t h a t may throw XxxException catch ( XxxException e ) { // do something Fel av typ XxxException och dess subklasser fångas Här nedanför fångas alla fel catch ( E x c e p t i o n e ) { // any s u b c l a s s o f E x c e p t i o n i s caught

Kasta fel void amethod (... ) throws XxxException { // code t h a t may throw XxxException Metoden amethod kastar XxxException Anrop av amethod måste hanteras Även main kan kasta fel, då avbryts programmet p u b l i c s t a t i c void main ( S t r i n g [ ] u ) throws YyyException { Strömmar används i all kommunikation i Java java.io.inputstream, java.io.reader read() läser en byte resp. en char java.io.outputstream, java.io.writer write(b) skriver en byte resp. en char Kan kopplas ihop med andra klasser för smidigare läsning/skrivning Kräver felhantering med IOException Trådar Tråd = enkel process Ett program kan ha flera trådar, flera aktiviteter pågår samtidigt i programmet. Javaprogram utan grafik har minst en tråd (maintråden) Javaprogram med grafik har minst två trådar (maintråden och grafiktråden) Man kan skapa egna trådar När behövs egna trådar? Tung bakgrundsaktivitet t.ex. hämta stor bild, spela musik, beräkning Aktiva objekt t.ex. klocka, klientanslutningar till en server producent/konsument tillämpningar Animering, simulering

1) extends Thread Hur gör man? Alternativ: 1. Ärv från klassen Thread 2. Implementera gränssnittet Runnable (när klassen måste ärva från annan klass) 3. Enkla animeringar: använd javax.swing.timer c l a s s A c t i v e extends Thread { A c t i v e ( ) { // s t a r t the Thread, // can be done l a t e r s t a r t ( ) ; public void run ( ) { // D e f i n e the Threads a c t i v i t y // There i s u s u a l l y a l o o p h e r e Några metoder i Thread run() trådens aktivitet start() starta, run() körs sleep(ms) vänta interrupt() tråden avbryts, kan ej återstarta join() invänta trådens slut Litet trådexempel Ett aktivt objekt skriver ut ett meddelande med visst tidsintervall. c l a s s A c t i v e extends Thread { S t r i n g t e x t ; // the message i n t pause ; i n t n ; // to count the p r i n t i n g s A c t i v e ( S t r i n g t, i n t p ) { t e x t = t ; pause = p ; s t a r t ( ) ; // s t a r t the t h r e a d : // s e e next page

Litet trådexempel, fortsättning. c l a s s A c t i v e extends Thread { // as p r e v i o u s page while ( n < 10) { // max 10 p r i n t i n g s Thread. s l e e p ( pause 1 0 0 0 ) ; catch ( I n t e r r u p t e d E x c e p t i o n i e ){ System. out. p r i n t l n ( t e x t + + n ) ; n++; System. out. p r i n t l n ( t e x t + f i n i s h e d ) ; Att avbryta en tråd c l a s s A c t i v e extends Thread { boolean keeprunning = true ; : while ( keeprunning ) { Thread. s l e e p ( pause 1 0 0 0 ) ; catch ( I n t e r r u p t e d E x c e p t i o n i e ) { keeprunning = f a l s e ; System. out. p r i n t l n ( t e x t ) ; System. out. p r i n t l n ( t e x t + was i n t e r r u p t e d ) ; : A c t i v e thethread = new A c t i v e (... ) ;... thethread. i n t e r r u p t ( ) ; 2) implements Runnable c l a s s A c t i v e implements Runnable { Thread a c t i v i t y ; A c t i v e ( ) { // C r e a t e Thread, connect to t h i s o b j e c t a c t i v i t y = new Thread ( t h i s ) ; a c t i v i t y. s t a r t ( ) ; // now or l a t e r // D e f i n e the Threads a c t i v i t y // There i s u s u a l l y a l o o p h e r e 3) javax.swing.timer har konstruktorhuvud Timer ( i n t delay, A c t i o n L i s t n e r l i s t e n e r ) kommer att upprepa anropet l i s t e n e r. a c t i o n P e r f o r m e d (... ) med tidsintervallet delay. Några metoder i javax.swing.timer: stop() start() setdelay(delay)

Tråd(o)säkerhet Klassiskt exempel c l a s s Konto { private i n t s a l d o ; public void taut ( i n t b ){ s a l d o = s a l d o b ; Om två trådar samtidigt vill ta ut pengar från samma konto kan det bli problem. Lösning Klassiskt exempel c l a s s Konto { private i n t s a l d o ; public synchronized void taut ( i n t b ){ s a l d o = s a l d o b ; synchronized Konto-objektet låses medan metoden taut() exekverar. Inga andra trådar kan köra synkroniserade metoder på objektetet medan taut() exekverar Singleton nr 2 är ej trådsäker Program som kommunicerar Skapar objektet i en metod, två trådar kan anropa samtidigt. Lägg till synchronized p u b l i c c l a s s S i n g l e t o n { p r i v a t e s t a t i c S i n g l e t o n t h e I n s t a n c e = n u l l ; p r i v a t e S i n g l e t o n ( ) { p u b l i c synchronized s t a t i c S i n g l e t o n g e t I n s t a n c e ( ) { i f ( t h e I n s t a n c e == n u l l ) t h e I n s t a n c e = new S i n g l e t o n ( ) ; return t h e I n s t a n c e ; Viktiga begrepp: IP-adresser - t.ex. gru-ld03.csc.kth.se eller 130.237.224.131 Portar logiska anslutningspunkter till dator, numrerade 0... 65535. 0... 1024 är reserverade: 13 för datum/tid 21 för ftp 23 för telnet 80 för HTTP Övriga nummer får användas fritt Sockets - själva anslutningen med möjlighet att ta emot och sända data.

Client-Server Uppkopplad förbindelse Serverprogram - program som väntar på att bli kontaktat av klienter Klientprogram - program som kopplar upp sig Sockets - en socket i varje ände av förbindelsen I Java: Socket hos klienten, ServerSocket hos servern Strömmar - Varje socket har en utström och en inström Klientens uppkoppling, ip-adr och portnr kända try { Socket sock = new Socket ( i p A d r e s s, p o r t n r ) ; catch ( IOException e ) { System. out. p r i n t l n ( Ingen a n s l u t n i n g ) ; Strömmar för kommunikation InputStream i n = sock. g e t I n p u t S t r e a m ( ) ; OutputStream out = sock. getoutputstream ( ) ; out.flush() krävs för sändning SSP-servern för labb 3 En ServerSocket väntar på att klienter ska ansluta En tråd skapas och startas för varje klient. Tråden är ett objekt av class Clienthandler extends Thread SSP-servern för labb 3 import j a v a. net. ; import j a v a. i o. ; import j a v a. u t i l. ; p u b l i c c l a s s S e r v e r 4 7 1 2 { p u b l i c s t a t i c void main ( S t r i n g [ ] a ) { S e r v e r S o c k e t sock = new S e r v e r S o c k e t ( 4 7 1 2, 1 0 0 ) ; while ( true ) new K l i e n t h a n t e r a r e ( sock. a c c e p t ( ) ). s t a r t ( ) ; catch ( IOException i o e ) { System. out. p r i n t l n ( i o e ) ;

SSP-servern, Klienthanterare-klassen c l a s s K l i e n t h a n t e r a r e extends Thread { s t a t i c i n t a n t a l t r a d a r =0; B u f f e r e d R e a d e r i n ; P r i n t W r i t e r ut ; p u b l i c K l i e n t h a n t e r a r e ( Socket s o c k e t ){ i n=new B u f f e r e d R e a d e r ( new InputStreamReader ( s o c k e t. g e t I n p u t S t r e a m ( ) ) ) ; ut=new P r i n t W r i t e r ( s o c k e t. getoutputstream ( ) ) ; catch ( IOException e ){ System. e r r. p r i n t l n ( e ) ; // metoden run f i n n s har metoden run() i Klienthanterare Random random=new Random ( ) ; S t r i n g [ ] hand={ STEN, SAX, PASE ; // h a l s n i n g a r while ( true ) { S t r i n g i n d a t a = i n. r e a d L i n e ( ) ; i f ( i n d a t a==n u l l i n d a t a. e q u a l s ( ) ) break ; ut. p r i n t l n ( hand [ random. n e x t I n t ( 3 ) ] ) ; ut. f l u s h ( ) ; // a v s l u t n i n g catch ( E x c e p t i o n e ) { System. e r r. p r i n t l n ( e ) ; delar av run() i Klienthanterare // h a l s n i n g a r n a S t r i n g namn=i n. r e a d L i n e ( ) ; System. out. p r i n t l n ((++ a n t a l t r a d a r )+ : +namn ) ; ut. p r i n t l n ( Hej, +namn ) ; ut. f l u s h ( ) ; // a v s l u t n i n g System. out. p r i n t l n ( Nu s l u t a d e +namn ) ; a n t a l t r a d a r ; Producent-konsument-tillämpning Producenterna är aktiva objekt (trådar) Konsumenterna är aktiva objekt (trådar) Ett kontrollobjekt har synkroniserade metoder som anropas av producent och konsument Producenter och konsumenter läggs i vänteläge resp. återaktiveras via kontrollobjektet

Exempel: Våffelkalas Producent: Vaffelgraddare extends Thread Konsumenter: Vaffelatare extends Thread Kontrollobjekt: Upplaggsfat, rymmer en enda våffla. När en våffla ligger på fatet får producenten vänta När fatet är tomt kan producenten lägga dit våffla När fatet är tomt får konsumenterna vänta När en våffla ligger på fatet kan en konsument ta den Gräddaren lägger våfflor 1,2,3,... 20 på fatet. Ätarna tar dem! All kod läggs på kurshemsidan: Vaffelgraddare, Vaffelatare, Upplaggsfat, Vaffelkalas p u b l i c c l a s s U p p l a g g s f a t { p r i v a t e i n t v a f f l a =0; p r i v a t e boolean v a f f l o r S l u t = f a l s e ; p u b l i c boolean v a f f l o r S l u t ( ) { return v a f f l o r S l u t ; p u b l i c synchronized void l a g g ( i n t n y V a f f l a ){ while ( v a f f l a >0) { w a i t ( ) ; catch ( E x c e p t i o n e ) { ; v a f f l a = n y V a f f l a ; n o t i f y ( ) ; // f o r t s a t t n i n g f o l j e r p u b l i c synchronized i n t tag ( ) { while ( v a f f l a==0 &&! v a f f l o r S l u t ( ) ) { w a i t ( ) ; catch ( E x c e p t i o n e ) { ; i n t t a g e n V a f f l a = v a f f l a ; v a f f l a =0; n o t i f y ( ) ; i f ( t a g e n V a f f l a == V a f f e l g r a d d a r e. ANTAL VAFFLOR) v a f f l o r S l u t = true ; return t a g e n V a f f l a ; Viktiga metoder wait(), från Object, aktuell tråd läggs i vänteläge notify(), från Object, någon av de väntande trådarna startar igen synchronized nödvändigt, annars kan flera ta samma våffla