Java-programmering. GUI-exempel. WindowTest.java. Händelsestyrt. WindowTestGUI.java (forts) WindowTestGUI.java. GUI UDP TCP Trådar Laboration 2 Tips

Relevanta dokument
Socket-programmering. Programmering för distribution. Klient/server ansatsen. Klient/server ansatsen TCP/IP protokollgrafen Java-programering

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

Datakommunikation och Internet

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

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

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

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Föreläsning 3: Händelsestyrda program och användargränssnitt

Objektorienterad programmering i Java

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

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

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Tentamen Nätverksprogrammering Lösningsförslag

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

10 Kommunikation i Java

Tentamen Nätverksprogrammering Lösningsförslag

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

Grafiska komponenter.

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

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

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

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

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

Mer om grafiska komponenter. Händelsestyrda program

Klasser som datastrukturer

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Lab5 för prgmedcl04 Grafik

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Laboration 24 Databasen MySQL och java

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Laboration 15 Grafiskt användargränssnitt

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

Tentamen. Lösningsförslag

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Åtkomst och användarhandledning

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

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 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

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

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

TENTAMEN OOP

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Klasshierarkier - repetition

Applets med komponenter

F8 Meddelandesändning med UDP

Lösningsförslag tentamen FYTA11 Java

JAVA Mer om klasser och objektorientering

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Lite logik. Kap 6: Sid 2

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

FactoryCast HMI. Premium & Quantum PLC. Applets

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Tentamen Nätverksprogrammering Lösningsförslag

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

Laboration 13, Arrayer och objekt

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Lösningar för tenta 3 DAT043,

Java-concept och Swing. Swing low, sweet chariot

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Malmö högskola 2008/2009 CTS

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Tentamen Nätverksprogrammering Lösningsförslag

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Chapter 4: Writing Classes/ Att skriva egna klasser.

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

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

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

Malmö högskola 2007/2008 Teknik och samhälle

Konstruktion av klasser med klasser

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

OOP Objekt-orienterad programmering

Föreläsning 5-6 Innehåll

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Transkript:

Java-programmering GUI-exempel GUI UDP Trådar Laboration 2 Tips main Skapa GUI Rita på skärmen Sätt vem som ska lyssnas på 2/11-00 Datakommunikation - Jonny Pettersson, UmU 1 2/11-00 Datakommunikation - Jonny Pettersson, UmU 2 Händelsestyrt Uppdatering Händelse 2/11-00 Datakommunikation - Jonny Pettersson, UmU 3.java import java.awt.*; // Denna klass innehåller själva funktionaliteten för // programmet, dvs update label. Kan även sägas vara huvudklass. // Har en main-funktion och instansierar ett nytt GUI. public class extends Frame private gui; // För att körningen skall starta. Instansierar denna klass. public static void main(string[] args) program = new (); // Konstruktor som skapar ett nytt GUI och skickar med en // referens till detta objekt, vilket betyder att detta objekt // kommer att refereras till av variabeln "program" i de båda // andra klasserna. public () gui = new (this); // Metod som anropas av lyssnaren när en event inträffat. public void updatelabel() gui.updatelabel(gui.getquote()); System.out.println("Updating label"); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 4.java import java.awt.*; // Denna klass ritar upp själva gränssnittet och sätter // upp lyssnare för olika komponenter public class private program; private listener; private Panel buttonpanel = new Panel(); private Button okbutton = new Button("OK"); private Button quitbutton = new Button("Quit"); private Label infolabel = new Label("Enter a text in the field below and press OK"); private Label textlabel = new Label("Nothing entered"); private TextField inputfield = new TextField(50); // Konstruktorn. Tar det anropande programmet som parameter public ( callingprogram) program = callingprogram; // Skapa en ny lyssnare listener = new (program); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 5.java (forts) // Tala om vad de olika knapparna skall ha för ID och // addera lyssnare till dessa okbutton.setactioncommand("ok"); okbutton.addactionlistener(listener); quitbutton.setactioncommand("quit"); quitbutton.addactionlistener(listener); // Programmet får ett rutsystem med 4 rader och 1 kolumn // att placera komponenter i program.setlayout(new GridLayout(4,1)); // Lägg till de olika komponenterna program.add(infolabel); program.add(inputfield); program.add(textlabel); // Lägg till de två knapparna i en panel, för att få dem // bredvid varandra. Lägg sedan till panelen i den sista // "rutan" i programmet buttonpanel.add(okbutton); buttonpanel.add(quitbutton); program.add(buttonpanel); // Sätt en defaultstorlek program.setsize(300,200); // Gör programmet synligt program.setvisible(true); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 6

.java (forts).java import java.awt.event.*; // För att sätta ny text i textlabeln public void updatelabel(string newtext) textlabel.settext(newtext); // För att hämta texten från inmatningsfältet public String getquote() return inputfield.gettext(); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 7 // Denna klass lyssnar på de två knapparna i GUIet och // rapporterar till huvudprogrammet när knapparna tryckts in. public class implements ActionListener private program; // Konstruktor. // Tar referens till huvudprogrammet som argument // för att veta var rapport om händelser skall skickas. public ( listeningprogram) program = listeningprogram; // Metod som körs när en ActionEvent inträffat. // Tar reda på vilket ID händelsen har och utför därefter rätt saker. // Dessa IDn sattes med metoden setactioncommand i GUIet. public void actionperformed(actionevent event) String happened = event.getactioncommand(); if(happened.equals("ok")) // OK-knapp intryckt program.updatelabel(); else // Quit-knapp intryckt program.setvisible(false); // Ta bort GUI program.dispose(); // Frigör resurser System.exit(0); // Avsluta 2/11-00 Datakommunikation - Jonny Pettersson, UmU 8 UDP UDPClient.java Server serversocket = DatagramSocket() Läs från serversocket Skriv svar till serversocket Klient = DatagramSocket() Skapa adress och skicka datagram på Läs svar på Stäng class UDPClient public static void main (String argv[]) throws Exception // Skapa ström för att läsa från tangentbordet BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); // DatagramSocket = new DatagramSocket(); // Skapa IP-adress InetAddress IPAddress = InetAddress.getByName("emil"); // Läs in från tangentbordet byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 9 2/11-00 Datakommunikation - Jonny Pettersson, UmU 10 UDPClient.java (forts) UDPServer.java // Skapa datagram med sänddata och sänd det DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, 3456);.send(sendPacket); // Skapa datagram för att motta data och ta // emot data DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length);.receive(receivepacket); // Ta ut det erhålla datat ur paketet och // skriv ut det String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER: " + modifiedsentence); // Stäng socketen.close(); class UDPServer public static void main(string argv[]) throws Exception // DatagramSocket serversocket = new DatagramSocket(3456); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; while(true) // Skapa paket och ta emot data DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); String sentence = new String(receivePacket.getData()); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 11 2/11-00 Datakommunikation - Jonny Pettersson, UmU 12

UDPServer.java (forts) // Ta reda på IP-adress och port för klienten InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); // Behandla data, skapa paket och skicka det String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); Server welcomesocket = ServerSocket() Vänta på uppkoppling connectionsocket = welcomesocket.accept() Läs från connectionsocket uppkoppling Klient och koppla upp mot servern = Socket() Skicka på Skriv svar till connectionsocket Läs svar på Stäng connectionsocket Stäng 2/11-00 Datakommunikation - Jonny Pettersson, UmU 13 2/11-00 Datakommunikation - Jonny Pettersson, UmU 14 Client.java Client.java (forts) // Skapa ström för att läsa från servern BufferedReader infromserver = new BufferedReader( new InputStreamReader(.getInputStream())); class Client public static void main (String argv[]) throws Exception String sentence; String modifiedsentence; // Skapa ström för att läsa från tangentbordet BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); // Socket = new Socket("emil", 3456); // Läs in rad från tangentbordet och skriv till servern sentence = infromuser.readline(); outtoserver.writebytes(sentence + '\n'); // Läs in från servern och skriv ut på skärmen modifiedsentence = infromserver.readline(); System.out.println("FROM SERVER: " + modifiedsentence); // Stäng socketen.close(); // Skapa ström för att skriva till servern DataOutputStream outtoserver = new DataOutputStream(.getOutputStream()); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 15 2/11-00 Datakommunikation - Jonny Pettersson, UmU 16 Server.java Server.java (forts) // Skapa ström för att skriva till klienten DataOutputStream outtoclient = new DataOutputStream( connectionsocket.getoutputstream()); class Server public static void main(string argv[]) throws Exception String clientsentence; String capitalizedsentence; // Skapa serversocket ServerSocket welcomesocket = new ServerSocket(3456); // Läs in från klienten, omvandla och skicka tillbaka clientsentence = infromclient.readline(); capitalizedsentence = clientsentence.touppercase() + '\n'; outtoclient.writebytes(capitalizedsentence); while(true) // Acceptera uppkoppling Socket connectionsocket = welcomesocket.accept(); // Skapa ström för att läsa från klienten BufferedReader infromclient = new BufferedReader( new InputStreamReader(connectionSocket.getInputStream())); 2/11-00 Datakommunikation - Jonny Pettersson, UmU 17 2/11-00 Datakommunikation - Jonny Pettersson, UmU 18

Trådar i Java Laboration 2 public class Threadexampel public static void main(string[] args) throws java.io.ioexception System.out.println("Starting 5 threads..."); for (int i = 0 ; i < 5 ; i++) new ExampelThread(i).start(); System.out.println("5 threads started"); Chatklient (client) Chatserver Chatklient (client) public class ExampelThread extends Thread comp comp private int i; crypt (server) crypt public ExampelThread(int i) super("exampelthread"); this.i = i; public void run() System.out.println("Hallo from thread " + i); Physical links 2/11-00 Datakommunikation - Jonny Pettersson, UmU 19 2/11-00 Datakommunikation - Jonny Pettersson, UmU 20 Laboration 2 Nameserver From nameserver: ACK From nameserver: NOTREG From client: GETLIST From chatserver: ALIVE To client: LIST From chatserver: REG From client: GETMESSAGES Chatserver Chatclient MESSAGE QUIT Tips Trådar Trådsäkra funktioner Minnesläcka vid trådanvändning nanosleep() för balans Mutex Stäng alltid fildescriptorer Lås upp lås innan krasch Felhantering 2/11-00 Datakommunikation - Jonny Pettersson, UmU 21 2/11-00 Datakommunikation - Jonny Pettersson, UmU 22 Felhantering 1 Felhantering 2 #include <stdio.h> #include <stdarg.h> void lprintf(const char *fmt,...) va_list args; va_start(args, fmt); fprintf(stderr, "LOG: "); vfprintf(stderr, fmt, args); va_end(args); int main() lprintf("hej %d %s\n", 3, "små grisar"); #define DBUG #ifdef DBUG #define skriv(x, args...) fprintf(stderr, x, ##args); #else #define skriv(args...) ; #endif skriv("hej igen %d %s\n", 3, "små grisar"); return 0; 2/11-00 Datakommunikation - Jonny Pettersson, UmU 23 2/11-00 Datakommunikation - Jonny Pettersson, UmU 24

Tips (forts) Globala variabler och konstanter Dynamiska lösningar Make it work - make it fast Testning Använd C-biblioteket 2/11-00 Datakommunikation - Jonny Pettersson, UmU 25