86
Java : Aspects Avancés • La programmation Réseau

Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Embed Size (px)

Citation preview

Page 1: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java : Aspects Avancés

• La programmation Réseau

Page 2: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Communication par sockets

Les classes de java.net.* permettent très facilement de se connecter à une machine afin d’y établir des flux d’entrées/sorties.

En java, la socket est équivalente à un gestionnaire d’entrée/sortie entre deux machines.

Page 3: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Protocoles de communication

Il existe deux protocoles utilisant les sockets en Java :

TCP : Stream Socket Communication en mode connectéS Les applications sont averties lors de la

déconnexion

UDP : Datagram Socket Communication en mode non connectéS Plus rapide mais moins fiable que TCP

Page 4: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Protocole TCP

Le serveur : Crée une socket

Attend une connection

accepte la demande

échange de données

Le client :

demande une connection

création de socket

échange de données

Page 5: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

ServerSocket

Définit une socket sur le serveur.

Pour créer une ServerSocket, il faut lui donner un numéro de port.

Une fois crée, la socket Serveur attend une connection par la méthode accept().

Ex : ServerSocket s = new ServerSocket (8888)Socket socket = s.accept(); // attente d ’une

connection

Page 6: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

La Socket du client

Se connecter sur une socket d ’un serveur, implique de connaître son adresse.

InetAddress permet de récupérer une adresse à partir d ’un nom.

La liaison d ’une socket à la socket serveur peut alors être demandée

Ex : InetAddress addr = InetAddress.getByName("crabe");Socket socket = new Socket(addr, Serveur_1.PORT);

Page 7: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Communication inter-socket

Les communication entre socket s ’effectue ‘ classiquement ’,

par les flux d ’entrées, issus de la méthode getInputStream

par les flux de sorties, issus de la méthode getOutputStream.

Page 8: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Communication inter-socketExemple

ServerSocket s = new ServerSocket(8888);System.out.println("Socket lancee : " + s);try {

Socket socket = s.accept(); // Attendre une connectiontry {

System.out.println( "Connection acceptee: "+ socket);InputStream socket_in = new InputStream(

socket.getInputStream());DataInputStreaam in = new DataInputStreaam(socket_in);String str = in.readLine();

}}

Page 9: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Protocole UDP

Emission de paquets de données, rapide mais peu fiable

Définir un paquet à envoyer ou à recevoir par la classe DatagramPacket

Définir une socket par la classe DatagramSocket

Page 10: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Emission de paquets

import java.net.*;public class UDPClient{ public static void main(String arg[]) { try {

String chaine = "un message"; byte[] data = chaine.getBytes(); InetAddress addr = InetAddress.getByName(null); DatagramPacket packet = new DatagramPacket(data, data.length, addr,

1234); DatagramSocket ds = new DatagramSocket(); ds.send(packet); ds.close(); } catch(Exception e){} }}

Page 11: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Reception de paquets

import java.net.*;public class UDPServeur{ public static void main(String arg[]) { try { // Serveur DatagramSocket ds = new DatagramSocket(1234);

while(true) { DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); ds.receive(packet); System.out.println("Message: " + packet.getData()); } } catch(Exception e){} }}

Page 12: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Une classe réseau : URL

URL permet de créer des liens vers des pages internets :

Exemple : URL url = new

URL("http://www.univ-valenciennes.fr/index.html");

DataInputStream dis = new DataInputStream(url.openStream());

String line;

while ((line = dis.readLine()) != null)

System.out.println(line);

Page 13: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exercice

Un exemple classique de programmation réseau : le client-serveur.

Un serveur est lancé sur une machine et attend la connexion d’un client. Puis, il récupère les lignes envoyées par le client, les affiche et les lui renvoie.

Page 14: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java : Aspects Avancés

• Les Threads

Page 15: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Qu’est-ce qu’un thread?

Un thread est un processus qui hérite de son processus père.

Java permet la mise ne commun de code, de données (« light weight process » ou « processus léger »)

Le processus partage ses ressources système (entrées/sorties, ...).

La programmation est enfin sans contrainte !

Page 16: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Utilité des processus

Afin de « rendre la main » au programme principal.

Afin d ’interagir efficacement.

Pour la gestion des graphiques, des applets.

Page 17: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Définition d’un Thread

Pour créer une tâche, il suffit de faire hériter sa classe de la classe Thread.

La principale méthode de Thread est run() qui doit être surchargée. C’est la méthode qui sera exécutée simultanément par les autres tâches du programme.

La méthode yield() oblige la tâche à se reposer, pour laisser aux tâches la possibilité de s’exécuter

La classe Thread implémente l’interface Runnable. Implémenter Runnable oblige à définir la méthode run().

Page 18: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de thread (1/2)

class une_tache extends Thread{

une_tache(String nom) { super(nom); } // appel au constructeur de Threadpublic void run(){

while (true){

System.out.println("Mon nom est : " + getName());Thread.yield(); // petite pause

}}

}

Page 19: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de thread (2/2)

class Exemple_tache_1{

public static void main(String args[]){

une_tache tache1 = new une_tache("tache 1");une_tache tache2 = new une_tache("tache 2");tache1.start(); tache2.start();while (true){

System.out.println("Je suis la tâche principale");Thread.yield();

}}

}

Page 20: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Run et Start

La méthode run() est généralement placée dans une boucle infinie

La méthode start(), est utilisée pour lancer le Thread et appelle la méthode run()

Page 21: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Accès simultanés à une ressource

La programmation multitâche implique le partage de ressources (mémoire, objets). Dans certains cas, ceci peut être problématique.

Pour cela, Java dispose du mot clé synchronized qui assure l’exclusion mutuelle d’une section critique en informant le moniteur (gestionnaire de mémoire).

exemple: public synchronised void compte() {…} empèche toute instance de la classe de lancer compte tant qu’elle ne s’est pas terminée.

Lorsqu'un thread t1 exécute cette méthode à partir d ’un objet, un autre thread t2 ne peut pas l'exécuter à partir du même objet. Mais t2 peut l ’exécuter pour une autre instance de la même classe.

Page 22: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Synchronisation et efficacité

Chaque objet possède un verrou lock ou moniteur. (Cela fait partie de la classe Object).

Exemple de verrou : ...synchronized (compteur) {compteur.add() ; compteur.mult() ; ...}... Lorsqu'une méthode synchronisée d'un objet est

appelée, le verrou est mis, aucune autre méthode synchronisée de cet objet peut être exécutée.

Acquérir le verrou d'un objet est forcément coûteux. Il faut donc savoir gérer et diminuer au maximum les sections critiques.

Page 23: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Le processus dans tous ses états

Nouveau : il est créé mais start() n ’est pas encore appelé

Exécutable : il a été initialisé (il est exécuté si l ’ordonnanceur le décide)

Mort : fin normale d ’un Thead (sortie de la méthode run()

Bloqué : l ’ordonnanceur ignore le Tread

Page 24: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Raison d ’un blocage

Le thread peut être : endormi : sleep(milliseconds) suspendu : par suspend(). Il sera alors

relancé par resume() en attente : par wait(). Il pourra alors être

réactivé par notify() ou notifyAll() IO : en attente d ’une Entrée/Sortie synch : en attente de la libération d ’une

ressource synchronisée

Page 25: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Différence Wait/Suspend

Suspend : Tient le verrou de l ’objet, donc bloque dons les méthode synchronisées et peut être source de DeadLock

Wait ne tient pas les verrous et donc ne doit pas être appelé d ’un bloc

synchronisé, sous risque d ’accès concurrent

Page 26: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Maintien en cohérence...

Il faut éviter l ’utilisation de : stop : cette méthode libère les verrous

même si l ’objet est dans un état instable Il faut le remplacer par un test dans la boucle

du run() lever l ’exception InterrupedException en

utilisant la méthode interrupt()

suspend (et donc resume), car ils sont sources de nombreux deadlock

Page 27: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exercice

Un exemple classique de programmation de processus : le producteur-consommateur.

Un producteur produit des objets dans une pile, 2 consommateurs en consomment.

Ecrire les classes Tab_objets, Producteur et Consommateur, ainsi que la classe principale.

Page 28: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java : Aspects Avancés

• Les applets

Page 29: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Une Applet...

Second type de programmation Java, le plus connu car le plus visible

Ne peut être exécutée que depuis un Navigateur

Le Navigateur doit contenir en interne une machine virtuelle sa propre méthode main

Page 30: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Les méthodes d ’une applet

Une applet est un objet graphique (descendant de panel), aussi contient elle des méthodes graphiques.

Les principales méthodes d ’une applet sont :

init(), que le navigateur appelle après chaque chargement de l’applet.,

start(), lancée après l’initialisation,

stop(), arrête l’applet lorsqu’elle n’est plus visible,

destroy(), appelé à l’arrêt du navigateur, ou au rechargement de l’applet,

paint(Graphics g) est appelé chaque fois que l’applet est réaffichée.

Page 31: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple d ’applet

import java.awt.*;import java.applet.*;

public class Applet1 extends Applet{

Font font;public void init(){

font = new Font("TimesRoman", Font.PLAIN,20);}public void paint(Graphics g){

g.setFont(font);g.setColor(Color.red);g.drawString("Salut tout le monde!", 0, font.getSize());g.draw3DRect(0, 0, 180, 30, true);

}}

Page 32: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Insertion dans une page Web

L ’insertion est possible par le tag APPLET : <HTML><HEAD><TITLE>Exemple d'applet</TITLE><BODY><H1>Un exemple dapplet</H1><applet code="Applet1.class" width=200 height=50>

desole ... ce navigateur ne supporte pas les applets </applet></BODY></HEAD></HTML>

Page 33: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Passage de paramètres dans une page Web

La méthode getParameter("msg") retourne la valeur du paramètre indiqué dans la page web.

Pour passer les paramètres, il faut appeler l’applet dans la page web comme ceci :

<Applet code="Applet1.class" width=300 height=200> <param name=msg value="voici le message"></Applet>

Page 34: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Archiver les classes

Lorsqu ’une applet utilise une autre classe située dans le même répertoire, elle charge cette classe, ce qui cause un ralentissement.

Pour éviter les multiples chargement il faut compresser les classes avec jar

L’appel à partir d’une page web se fera sous la forme :

<Applet code="Applet1.class" archive= "nom_archive.jar" width=300 height=200>

<param name=msg value="voici le message"></Applet>

Page 35: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Applet permanente

Toutes les applets utilisent la même machine virtuelle. Si l’on souhaite créer une applet à activité permanente (défilement de texte, d’images, ...), il faut la créer en tant que processus afin de ne pas bloquer les autres applets.

Pour cela, il faut que l’applet implémente l’interface Runnable (similaire à Thread, mais qui permet de réécrire la fonction stop())

Page 36: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exercice

Ecrire une applet qui affiche un texte déroulant dans la barre d ’état du navigateur.

On utilisera la fonction showStatus de l ’applet.

La fréquence de défilement est passée en paramètre

Page 37: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java : Aspects Avancés

• AWT : Abstract Window Toolkit

Page 38: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Généralités sur AWT

AWT comporte : des éléments graphiques

des conteneurs

Un mécanisme de gestion d'événements, ...

AWT a beaucoup évolué entre 1.0.2 et 1.1.1 : nouveau modèle événementiel

gestion de l'impression

gestion de l'échange de données AWT a encore évolué avec Java Foundation

Class et java.2D

Sylvain LECOMTE & Vincent POIRRIEZ

Page 39: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Les objets graphiques de AWT

Les éléments graphiques Button

Canvas (zone de dessin)

Checkbox

Choice

Label

List

MenuBar

MenuItem

TextArea

TextField

Sylvain LECOMTE & Vincent POIRRIEZ

Page 40: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Les conteneurs de AWT

Les conteneurs sont les couches sur lesquels seront dessinés les objets :

Frame Dialog Window Panel (conteneur de base)

Les Gestionnaires de mise en page permettent de placer automatiquement les objets.

Sylvain LECOMTE & Vincent POIRRIEZ

Page 41: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

FlowLayout

java.awt.FlowLayout : de gauche à droite, de haut en bas

one two three

Sylvain LECOMTE & Vincent POIRRIEZ

Page 42: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

BorderLayout

java.awt.BorderLayout découpe la zone en Nord, Sud, Est, Ouest et Centre

North

South

West EastCenter

Sylvain LECOMTE & Vincent POIRRIEZ

Page 43: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

GridLayout

java.awt.GridLayout découpe la zone en une grille dont on peut choisir les dimensions

one two

four five

three

six

Sylvain LECOMTE & Vincent POIRRIEZ

Page 44: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Avantage de AWT

Il permet de créer une interface graphique d ’exécutant sous toutes les interfaces (Windows, Xwindows, …)

il simplifie la tâche du concepteur de l ’IHM (presque tous les objets sont présents)...

Sylvain LECOMTE & Vincent POIRRIEZ

Page 45: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Evenements

Chaque objet graphique (ou presque) possède sa propre gestion dévénements,

Java propose des interfaces d ’écoute (Window, Mouse, ...)Listener

Pour les plux complexes, il existe des classes dont les méthodes ne font rien !(Window, Mouse, ...)Adapter

Avantage, si une classe hérite d ’une de ces classes, elle n ’a qu ’à surcharger la méthode désirée

Sylvain LECOMTE & Vincent POIRRIEZ

Page 46: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple d ’interface AWTSylvain LECOMTE & Vincent POIRRIEZ

Page 47: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple d ’interface AWT (2)

tfPanel

chPanel

lstPanel

cbPanel

rbPanel

btPanel

MenuBar

Label

Checkbox

Button

TextField

Choice

List

Sylvain LECOMTE & Vincent POIRRIEZ

Page 48: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de label

// Text Field PanelPanel tfPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); label = new Label("TextField");tfdPanel.add(label);

textField = new TextField(15);tfPanel.add(textField);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 49: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de choix

// Choice Panel

Panel chPanel = new Panel(new FlowLayout(FlowLayout.LEFT));

label = new Label("Choice");chPanel.add(label);

choice = new Choice();choice.addItem("Solaris");choice.addItem("Linux");choice.addItem("Aix");

chPanel.add(choice);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 50: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de liste

// List PanelPanel listPanel = new Panel(new FlowLayout(FlowLayout.LEFT));

label = new Label("List");listPanel.add(label);

list = new List();list.addItem("Solaris");list.addItem("Linux");list.addItem("Aix");

listPanel.add(list);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 51: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de cases

// Checkbox PanelPanel cbPanel = new Panel(new FlowLayout(FlowLayout.LEFT));

cbSolaris = new Checkbox("Solaris");cbPanel.add(cbSolaris);

cbLinux = new Checkbox("Linux");cbPanel.add(cbLinux);

cbAix = new Checkbox("Aix");cbPanel.add(cbAix);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 52: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de bouton radio

// RadioButton PanelPanel rbPanel = new Panel(new FlowLayout(FlowLayout.LEFT));rbGroup = new CheckboxGroup();

rbSolaris = new Checkbox("Solaris");rbSolaris.setCheckboxGroup(rbGroup);rbPanel.add(rbSolaris);

rbLinux = new Checkbox("Linux");rbLinux.setCheckboxGroup(rbGroup);rbPanel.add(rbLinux);

rbAix = new Checkbox("Aix");rbAix.setCheckboxGroup(rbGroup);rbPanel.add(rbAix);

rbGroup.setSelectedCheckbox(rbSolaris);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 53: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Evenement sur choix, boutons radios, cases et listes

ItemListener est l’interface permettant de gérer les événements sur les objets de type Choice, List et CheckBox 

Elle contient la méthode itemStateChanged(ItemEvent e) déclenchée lors de sélection/déselection d’un item.

Sylvain LECOMTE & Vincent POIRRIEZ

Page 54: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de bouton

// Button PanelPanel btPanel = new Panel(new FlowLayout(FlowLayout.LEFT)); okButton = new Button("Ok");okButton.addActionListener(new OkButtonListener());btPanel.add(okButton); cancelButton = new Button("Cancel");cancelButton.addActionListener(new CancelButtonListener());btPanel.add(cancelButton);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 55: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de menu

// Menu BarMenu procMenu = new Menu("Procedural");procMenu.add(new MenuItem("Pascal")); ... Menu ooMenu = new Menu("Object Oriented");ooMenu.add(new MenuItem("SmallTalk"));...Menu funcMenu = new Menu("Functional");funcMenu.add(new MenuItem("Lisp"));...Menu languageMenu = new Menu("Languages");languageMenu.add(procMenu);...MenuBar mb = new MenuBar();mb.add(languageMenu);

Sylvain LECOMTE & Vincent POIRRIEZ

Page 56: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de construction

public class FrameExample extends Frame {public FrameExample(String title) {

super(title);...

setMenuBar(mb); setLayout(new GridLayout(0, 1, 2, 2)); add(textFieldPanel); add(choicePanel); add(listPanel); add(checkboxPanel); add(radioButtonPanel); add(buttonPanel); pack(); show();}

Sylvain LECOMTE & Vincent POIRRIEZ

Page 57: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de gestion d’événement sur bouton

Gestion des événements : clic sur le bouton Ok

okButton.addActionListener(new OkButtonListener()); public class OkButtonListener implements ActionListener { public void actionPerformed(ActionEvent evt) { System.out.println("textField = " + textField.getText()); System.out.println("choice = " + choice.getSelectedItem()); System.out.println("list = " + list.getSelectedItem()); System.out.println("cbSolaris=" + (cbSolaris.getState() ?"Yes" : "No")); System.out.println("cbLinux=" + (cbLinux.getState() ?"Yes" : "No")); System.out.println("cbWindow=" + (cbAix.getState() ?"Yes" : "No")); System.out.println("rbSolaris=" + (rbSolaris.getState() ?"Yes" : "No")); System.out.println("rbLinux=" + (rbLinux.getState() ?"Yes" : "No")); System.out.println("rbWindow=" + (rbAix.getState() ?"Yes" : "No")); }}

Sylvain LECOMTE & Vincent POIRRIEZ

Page 58: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de gestion d’événement sur menu

Gestion des événements : sélection d'items du menu

MenuItem mi = new MenuItem("Pascal");mi.addActionListener(new LanguageMenuListener());

public class LanguageMenuListener implements ActionListener { public void actionPerformed(ActionEvent evt)

{ System.out.println("Menu: " + evt.getActionCommand()}; }}

Sylvain LECOMTE & Vincent POIRRIEZ

Page 59: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exemple de gestion d’événement sur fenêtre

Gestion des événements : fermeture de la fenêtre

addWindowListener(new MyWindowListener());

public class MyWindowListener extends WindowAdapter { public void windowClosing(WindowEvent evt)

{ System.out.println("Window closing"); System.exit(0); }}

Sylvain LECOMTE & Vincent POIRRIEZ

Page 60: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Evenement sur champs de texte et zone de texte

L’interface TextListener permet de gérer les événements sur les objets de type TextField et TextAera,

Elle contient la méthode textValueChanged(TextEvent e) déclenchée lors de modification du texte

Sylvain LECOMTE & Vincent POIRRIEZ

Page 61: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Autres gestions d ’événements (souris)

On trouve aussi l’interface MouseListener qui définit les méthodes

void mouseClicked(MouseEvent e) clic sur l’objet void mouseEntered(MouseEvent e) passage sur

l’objet void mouseExited(MouseEvent e) sortie de l’objet void mousePressed(MouseEvent e) pression sur

l’objet void mouseReleased(MouseEvent e) relâche de

l’objet

Cette interface est implémentée par la classe MouseAdapter qu ’il faudra étendre pour gérer les événements souris

Sylvain LECOMTE & Vincent POIRRIEZ

Page 62: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Autres gestions d ’événements (fenêtre)

Ainsi que l’interface WindowListener qui définit les méthodes suivantes :

void windowActivated(WindowEvent e) la fenêtre devient active void windowClosed(WindowEvent e) fermeture par un bouton ou autre void windowClosing(WindowEvent e) fermeture par menu système void windowDeactivated(WindowEvent e) la fenêtre n’est plus active void windowDeiconified(WindowEvent e) de minimisée à un autre état void windowIconified(WindowEvent e) minimisation void windowOpened(WindowEvent e) première ouverture

Cette interface est implémentée par la classe WindowAdapter qu ’il faudra étendre pour gérer les événements sur la fenêtre.

Sylvain LECOMTE & Vincent POIRRIEZ

Page 63: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

L ’objet graphics

Les fonctions de la classe Graphics permettent de dessiner simplement différentes figures sur un support :

clearRect, draw3Drect, drawArc, drawImage, drawLine, drawOval, drawPolygon, drawPolyline, drawRect, drawString, fill3Drect, fillArc, fillOval, fillPolygon, fillRect, getColor, getFont, setColor, setFont.

Le support peut être tout objet descendant de Composant

Sylvain LECOMTE & Vincent POIRRIEZ

Page 64: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Exercice

Créer une Frame permettant de dessiner des lignes à l ’aide de la souris

Utiliser un tableau de 10 Points pour tracer des lignes entre chaque Point.

Page 65: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java : Aspects Avancés

• Le Swing

Sylvain LECOMTE & Vincent POIRRIEZ

Page 66: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Swing :Qu ’est ce que c ’est ?

Swing est un ensemble de librairies graphiques plus évoluées et plus complètes que les librairies AWT.

Swing est livrée avec le JDK 1.2,

pour JDK 1.1, il est possible de télécharger les classes swing.

Sylvain LECOMTE & Vincent POIRRIEZ

Page 67: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Nouvelles Fonctionnalités

Swing propose de nouveaux composants tels que Les Tables, les Arbres, la Barre de progression… Les objets graphiques AWT ont été surchargés (on

trouve maintenant les types JButton, Jpanel, ...) Avec Swing, il est possible de masquer certains

événements Il est possible de "zaper" entre les différentes

interfaces : l ’interface Windows l ’interface Motif une interface 3D « métale »

Sylvain LECOMTE & Vincent POIRRIEZ

Page 68: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Un exemple de swing...

import javax.swing.*; import java.awt.*;import java.awt.event.*;public class SwingApplication { private static String labelPrefix = "Number of button clicks: "; private int numClicks = 0; public Component createComponents()

{ final JLabel label = new JLabel(labelPrefix + "0 "); JButton button = new JButton("I'm a Swing button!"); button.setMnemonic(KeyEvent.VK_I); button.addActionListener(new ActionListener()

{ public void actionPerformed(ActionEvent e)

{ numClicks++;

label.setText(labelPrefix + numClicks); } } ); label.setLabelFor(button); }

Sylvain LECOMTE & Vincent POIRRIEZ

Page 69: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Un exemple de swing Suite...

public static void main(String[] args) { try {

UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { } //Create the top-level container and add contents to it. JFrame frame = new JFrame("SwingApplication"); SwingApplication app = new SwingApplication(); Component contents = app.createComponents(); frame.getContentPane().add(contents, BorderLayout.CENTER); //Finish setting up the frame, and show it. frame.addWindowListener(

new WindowAdapter() { public void windowClosing(WindowEvent e)

{System.exit(0); } }); frame.pack(); frame.setVisible(true); }

Sylvain LECOMTE & Vincent POIRRIEZ

Page 70: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Swing dans une applet

Il est tout à fait possible de créer des applets utilisant des composants swing. Il faut alors être sûr que les navigateurs des utilisateurs pourront interpréter le swing.import javax.swing.*; import java.awt.*;public class HelloSwingApplet extends JApplet { public void init() { JLabel label = new JLabel("You are successfully running a Swing applet!"); label.setHorizontalAlignment(JLabel.CENTER);//Add border. label.setBorder(BorderFactory.createMatteBorder(1,1,2,2,Color.black)); getContentPane().add(label, BorderLayout.CENTER); }}

Sylvain LECOMTE & Vincent POIRRIEZ

Page 71: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Un autre exemple : un menu

Sylvain LECOMTE & Vincent POIRRIEZ

Page 72: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Conclusion sur Swing

Swing offre surtout beaucoup plus de composants que AWT (trop ?) :

Le rendu est meilleur

Les options nombreuses

Mais l ’API est encore difficile à connaître

ne pas hésiter à utiliser le Tutorial...

Sylvain LECOMTE & Vincent POIRRIEZ

Page 73: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java : Aspects Avancés

• Les JavaBean

Sylvain LECOMTE & Vincent POIRRIEZ

Page 74: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

La notion de composant

Un bean Java est un composant réutilisable (sorte d ’active X)

Il facilite donc la création de programmes par connexion de composants

Java propose déjà un ensemble de composants très utiles (le bean hotjava par exemple pour afficher une page web, ...)

Pour développer, utiliser des beans, il existe le bdk, le kit de développement de beans ...

Sylvain LECOMTE & Vincent POIRRIEZ

Page 75: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Outil de développement

Réserve decomposants

Propriété ducomposantsélectionné

Application

Sylvain LECOMTE & Vincent POIRRIEZ

Page 76: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

L ’introspection

Permet à un système de se regarder lui même

Exemple :

Les objets de la classe Class représente des classes du système

Les objets de la classe Method représente des méthodes

On peut alors rechercher une classe par son nom

Class classButton = Class.forName("Button");

et créer une nouvelle instance de cette classe

Objetc myButton = classButton.newInstance();

et récupérer toutes les méthodes de cette classe :

Method [] bmethods = classButton.getDeclaredMethods();

Sylvain LECOMTE & Vincent POIRRIEZ

Page 77: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Qu ’est ce qu ’un Beans ?

Un composant qui possède : des propriétés

des événements reconnus

des méthodes de traitement des événements

Importance de l ’introspection : possibilité d ’interroger le composant

Quelles sont tes méthodes, les variables, les événements traités

Sylvain LECOMTE & Vincent POIRRIEZ

Page 78: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Types de Beans

Component (montre, barre, synoptique, ...)

Container (panneau, ...)

Invisible (ne possède pas d ’interface graphique )

joue le rôle d ’interface

Applet

Sylvain LECOMTE & Vincent POIRRIEZ

Page 79: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

La double vie des Beans

Pendant la configuration dans le BDK le Bean peut posséder sa propre interface graphique de configuration

Le bean est sérializé à la fermeture du bdk, il est désérialisé (rechargé) à l exécution.

Les méthodes du bean sont activés par des événements.

Sylvain LECOMTE & Vincent POIRRIEZ

Page 80: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Classes d’évènements prédéfinies

Evénements de bas niveau java.util.EventObject

java.awt.AWTEvent java.awt.event.ComponentEvent java.awt.event.FocusEvent java.awt.event.WindowEvent java.awt.event.InputEvent

java.awt.event.KeyEvent java.awt.event.MouseEvent

Sylvain LECOMTE & Vincent POIRRIEZ

Page 81: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Créer un Bean...

1. Ecrire le source : C ’est un rectangle rouge

import java.awt.*; import java.io.Serializable; public class SimpleBean extends Canvas implements

Serializable { public SimpleBean()

{ setSize(60,40); setBackground(Color.red); }}

2. Créer un fichier jar contenant la classe SimpleBean

Sylvain LECOMTE & Vincent POIRRIEZ

Page 82: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Créer un Bean (suite)

3. Charger le .jar dans la ToolBox

4. Créer une instance de la classe dans la BeanBox

On peut se rendre compte que le Bean dispose d ’un certain nombre de propriétés (qui sont en fait héritées de Canvas) :

Foreground

Background

font

name

Sylvain LECOMTE & Vincent POIRRIEZ

Page 83: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Ajouter une propriété

Exemple : la propriété de « couleur » 1. Créer et initialiser l ’atribut : private Color color = Color.green; 2. Ecrire une méthode pour obtenir la couleur :

public Color getColor() {return color;}

3. Ecrire une méthode pour changer la couleur public void setColor(Color newColor){ color = newColor; repaint();}

4.Réécrire la méthode paint() héritée de Canvas : public void paint(Graphics g) { g.setColor(color); g.fillRect(20, 5, 20,

30);}

5.Compiler le Bean, le charger dans la Toolbox et créer une

instance dans la BeanBox.

Sylvain LECOMTE & Vincent POIRRIEZ

Page 84: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

RésultatSylvain LECOMTE & Vincent POIRRIEZ

Page 85: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Enterprise Java Beans

Ce sont les Beans contenant une couche client serveur,

très à la mode en ce moment (commerce électroniques, accès à ds bases de données distantes, communication aux travers de site web,...)

Sylvain LECOMTE & Vincent POIRRIEZ

Page 86: Java : Aspects Avancés La programmation Réseau. Communication par sockets Les classes de java.net.* permettent très facilement de se connecter à une machine

Java , suite

Et non fin, cf. Internet, de nombreuses

applications de Java à tous niveaux,

possibilité d ’inclure des librairies C,

notions de servlet pour communication de données d ’un client vers un fournisseur par html,

accès sécurisé, xml, ...........

Sylvain LECOMTE & Vincent POIRRIEZ