Interfaces graphiques Java
IUT informatique des Cézeaux SI 2012/2013
Olivier Goutet
[email protected]
1 mars 2013
1 / 30
Plan
Images
Réseau
2 / 30
java.awt.Image
• Vue image
• Gère les formations GIF, JPEG, PNG, ...
• Images statiques
• Images dynamiques
3 / 30
java.awt.Image
4 / 30
Ouverture d'une image
BufferedImage img = null ;
try {
img = ImageIO . read ( new File ( " strawberry . jpg " ));
} catch ( IOException e ) {
e . printStracktrace ();
}
5 / 30
BueredImage
• Permet d'accéder à un pixel de l'image
◦ int getRGB(int x, int y)
• Pouquoi un int ?
6 / 30
BueredImage
• Permet d'accéder à un pixel de l'image
◦ int getRGB(int x, int y)
7 / 30
Achage d'une image
try {
BufferedImage img = null ;
img = ImageIO . read ( new File ( " strawberry . jpg " ));
ImageIcon icon = new ImageIcon ( img );
JLabel label = new JLabel ( icon );
// Ajouter le label dans l ' interface
} catch ( IOException e ) {
e . printStacktrace ();
}
8 / 30
TP
• Questions sur le TP ?
9 / 30
Plan
Images
Réseau
10 / 30
Java et réseau
• Raison d'être de java
• Découpé en deux parties
◦ java.net
• Sockets
◦ java.rmi
• Remote Method invocation
11 / 30
Sockets
• Interface de programmation réseau bas niveau
• Envoi de données entre applications
• Les classes de java.net rendent facile la communication
• Streams
◦ Lecture / écriture chier <=> réseau
12 / 30
Sockets
• Socket
◦ Avec connexion et sécurité de transmission
◦ Téléphone (TCP)
• DatagramSocket
◦ Pas de connexion, pas d'ordre d'arrivée garanti
◦ La poste (UDP)
• MulticastSocket
◦ DatagramSocket multicast
13 / 30
Client / Serveur
• Serveur
◦ Attends les connexions sur un port
◦ accept() les connexions
• Créée une socket par client.
◦ java.net.ServerSocket
◦ Un seul objet ServerSocket
14 / 30
Client / Serveur
Learning Java 2nd edition O'Reilly Pat Neiemeyer & Jonathan Knudsen
15 / 30
Client / Serveur
• Crée une socket
• Se connecte à un serveur
try {
Socket sock1 = new Socket ( " openium . fr " ,25);
Socket sock2 = new Socket ( " 91.121.54.191 " ,25);
} catch ( UnknownHostException e ){
System . out . println ( " On ne trouve pas le serveur " );
} catch ( IOException e ){
System . out . println ( " Impossible de se connecter " );
}
16 / 30
Exemple de client
try {
Socket server = new Socket ( " openium . fr " , 1234);
InputStream in = server . getInputStream ( );
OutputStream out = server . getOutputStream ( );
PrintWriter pout = new PrintWriter ( out , true );
pout . println ( " Hello server ! " );
out . write (42);
byte someByte = ( byte ) in . read ( );
BufferedReader bin =
new BufferedReader ( new InputStreamReader ( in ) );
String response = bin . readLine ( );
server . close ( );
} catch ( IOException e ) { ... }
17 / 30
Exemple de serveur
try {
ServerSocket listener = new ServerSocket ( 1234 );
while ( ! finished ) {
Socket client = listener . accept ( );
InputStream in = client . getInputStream ( );
OutputStream out = client . getOutputStream ( );
BufferedReader bin = new BufferedReader ( new InputStreamReader ( in ));
String someString = bin . readLine ( );
byte someByte = ( byte ) in . read ( );
out . write ( someByte +2);
PrintWriter pout = new PrintWriter ( out , true );
pout . println ( " Goodbye !" );
client . close ( );
}
listener . close ( );
} catch (...)
18 / 30
Exemple : serveur http
• Construire un serveur Web
◦ Retourne les chiers qu'on lui demande
◦ Multithread
• GET /chemin/fichier
19 / 30
Exemple : serveur http
public class TinyHttpd {
public static void main ( String argv [] )
throws IOException {
ServerSocket ss = new ServerSocket (
Integer . parseInt ( argv [0]));
while ( true ) {
new Thread ( new TinyHttpdConnection ( ss . accept ()))
. start ();
}
}
}
20 / 30
Exemple : serveur http (1)
class TinyHttpdConnection implements Runnable {
Socket client ;
TinyHttpdConnection ( Socket client ) throws SocketException {
this . client = client ;
}
public void run ( ) {
try {
BufferedReader in = new BufferedReader (
new InputStreamReader ( client . getInputStream () , " 8859 _1 " ));
OutputStream out = client . getOutputStream ( );
PrintWriter pout = new PrintWriter (
new OutputStreamWriter ( out , " 8859 _1 ") , true );
String request = in . readLine ( );
System . out . println ( " Request : "+ request );
// Traitement
client . close ( );
} catch ( IOException e ) {
System . out . println ( "I/ O error " + e ); }
}
}
21 / 30
Exemple : serveur http (2)
Matcher get = Pattern . compile (" GET /?(\\ S *).* " ). matcher ( request );
if ( get . matches ( ) ) {
request = get . group (1);
if ( request . endsWith ("/") || request . equals ("" ) )
request = request + " index . html " ;
try {
FileInputStream fis = new FileInputStream ( request );
byte [] data = new byte [ 64*1024 ];
for ( int read ; ( read = fis . read ( data )) > -1; ){
out . write ( data , 0, read );
}
out . flush ( );
} catch ( FileNotFoundException e ) {
pout . println ( " 404 Object Not Found " ); }
} else {
pout . println ( " 400 Bad Request " );
}
Learning Java 2nd edition O'Reilly Pat Neiemeyer & Jonathan Knudsen
22 / 30
8859_1 ?
• Encodage de caractères
• Issu de la Requests For Comments (RFC) HTTP
◦ (http ://www.ietf.org/rfc/rfc2616.txt)
• Uniquement de l'ascii
• Tous les serveurs doivent la respecter
23 / 30
Types de sockets
• TCP (Socket) s'occupe de tout
◦ L'ordre
◦ L'intégrité
◦ Connexion
• Pas UDP...
24 / 30
DatagramSocket (UDP)
• Inconvénients
◦ Les données n'arrivent pas toujours
◦ Pas toujours dans le bon ordre
◦ En double
• Avantages
◦ Rapide
25 / 30
Client SocketDatagram
byte [] data = message . getBytes ( );
InetAddress addr = InetAddress . getByName ( myHost );
DatagramPacket pack =
new DatagramPacket ( data , data . length , addr , myPort );
DatagramSocket ds = new DatagramSocket ( );
ds . send ( pack );
ds . close ( );
26 / 30
Server SocketDatagram
DatagramSocket s = new DatagramSocket ( port );
while ( true ) {
DatagramPacket packet =
new DatagramPacket ( new byte [1024] , 1024);
s . receive ( packet );
String message = new String ( packet . getData ( ) );
System . out . println ( " message from : "
+ packet . getAddress ( ). getHostName ( )
+ " - " + message );
}
27 / 30
Exercice
• Transmettre de requêtes d'un client à un serveur
• Executer cette requête sur le serveur
• Retourner le résultat via le réseau
28 / 30
Exercice
• Le client envoie
◦ Un objet de type requête
• Le client reçoit
◦ Le résultat de la requête
• Le serveur reçoit
◦ Un objet de type requête
• Le serveur renvoie
◦ Le résultat de la requête
29 / 30
Exercice
public class Request implements java . io . Serializable {}
public class DateRequest extends Request {}
public abstract class WorkRequest extends Request {
public abstract Object execute ( );
}
public class AuCarre extends WorkRequest {
int n ;
public AuCarre ( int n ) {
this . n = n ;
}
public Object execute ( ) {
return new Integer ( n * n );
}
}
Learning Java 2nd edition O'Reilly Pat Neiemeyer & Jonathan Knudsen
30 / 30