JDesktop
Par liguorien, jeudi 18 novembre 2004 à 22:32 :: Java :: #51 :: rss
Une des faiblesses de Java pour les applications desktop, c'est le manque d'accès au fonctionnalité natives de l'OS. JDesktop Integration Components(JDIC) est un projet qui donne au développeurs Java ce qu'ils ont toujours enviés au C# tout en conservant le multi-plateforme ! ^^
Ce projet à été lancé par les développeurs de Sun du groupe Desktop. Ensuite le projet à été mis en open source afin d'accélérer le développement.
Pour l'instant, le projet est divisé en 6 modules :
Desktop : Démarre les applications desktop pour ouvrir, éditer, imprimer des fichier et envoyer des mails.
Filetypes : Permet de modifier les association de type de fichier de l'OS.
Browser : Permet d'intégrer un navigateur natif (IE ou Mozilla) dans un cadre AWT.
Packager : Outils de ligne de commande pour convertir les application Java Web Start en installateur natif.
Tray API : Support pour les icones de panneaux et menu contextuels. (icônes en bas à droite dans Windows)
SaverBeans : Économisateur d'écran en Java.
Ce projet à été lancé par les développeurs de Sun du groupe Desktop. Ensuite le projet à été mis en open source afin d'accélérer le développement.
Pour l'instant, le projet est divisé en 6 modules :
Desktop : Démarre les applications desktop pour ouvrir, éditer, imprimer des fichier et envoyer des mails.
Filetypes : Permet de modifier les association de type de fichier de l'OS.
Browser : Permet d'intégrer un navigateur natif (IE ou Mozilla) dans un cadre AWT.
Packager : Outils de ligne de commande pour convertir les application Java Web Start en installateur natif.
Tray API : Support pour les icones de panneaux et menu contextuels. (icônes en bas à droite dans Windows)
SaverBeans : Économisateur d'écran en Java.
Par exemple, le code suivant ouvrirait le fichier avec votre éditeur ActionScript favori.
Java
Desktop.open("UneClasse.as");
Mais ce qui m'a le plus intéresser, c'est le fait de pouvoir intégrer un vrai navigateur dans un JFrame. Qu'est-ce qu'il y a habituellement dans un vrai navigateur ? Un plug-in flash !
J'ai donc fait une petite application en vitesse pour tester ça. Comme d'habitude, j'ai fait un exemple qui ne sert à rien...

Il s'agit d'un SWF avec un menu contextuel permettant de coller le contenu du Clipoard dans le SWF (si c'est une image). La communication se fait via un petit serveur socket maison que j'avait déjà fait pour les petits tests rapides.

Je n'ai pas encore fait d'installateur mais voici quelques screenshots.
Voici le code Java :
Java
import com.liguo.server.*;
import com.liguo.utils.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.imageio.*;
import java.awt.image.*;
import org.jdesktop.jdic.browser.*;
public class Main {
public static void main(String[] args) {
try{
//Création de l'interface graphique
JFrame frame = new JFrame("Une application flash dans un JFrame");
File f = new File("swf/main.html");
URL url = new URL("file://" + f.getAbsolutePath());
WebBrowser browser = new WebBrowser();
browser.setURL(url);
frame.add(browser);
frame.setSize(800,600);
frame.setVisible(true);
}catch(Exception ex){
ex.printStackTrace();
}
//Démarage du serveur pour la communication entre le Flash et le Java
RequestProcessor p = new RequestProcessorImpl(){
public String processRequest(String request){
if("getClipboard".equals(request)){
try{
BufferedImage img = Clipboard.getClipboard();
File file = new File("E:/temp.jpeg");
ImageIO.write(img ,"JPEG", file);
}catch(IOException ex){
request = "null";
}
}
return request;
}
};
LiguoServer server = new LiguoServer();
server.setRequestProcessor(p);
server.startServer(12000);
}
}
import com.liguo.utils.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.imageio.*;
import java.awt.image.*;
import org.jdesktop.jdic.browser.*;
public class Main {
public static void main(String[] args) {
try{
//Création de l'interface graphique
JFrame frame = new JFrame("Une application flash dans un JFrame");
File f = new File("swf/main.html");
URL url = new URL("file://" + f.getAbsolutePath());
WebBrowser browser = new WebBrowser();
browser.setURL(url);
frame.add(browser);
frame.setSize(800,600);
frame.setVisible(true);
}catch(Exception ex){
ex.printStackTrace();
}
//Démarage du serveur pour la communication entre le Flash et le Java
RequestProcessor p = new RequestProcessorImpl(){
public String processRequest(String request){
if("getClipboard".equals(request)){
try{
BufferedImage img = Clipboard.getClipboard();
File file = new File("E:/temp.jpeg");
ImageIO.write(img ,"JPEG", file);
}catch(IOException ex){
request = "null";
}
}
return request;
}
};
LiguoServer server = new LiguoServer();
server.setRequestProcessor(p);
server.startServer(12000);
}
}
Et dans le flash :
AS2
var root:MovieClip = this;
function pasteImage(){
var d = root.getNextHighestDepth();
var mc = root.createEmptyMovieClip("d"+d,d);
mc._x = root._xmouse;
mc._y = root._ymouse;
mc.loadMovie("file://E:/temp.jpeg");
}
var socket:XMLSocket = new XMLSocket();
socket.onData = function(data){
if(data == "getClipboard") pasteImage();
}
socket.connect("localhost",12000);
var menu:ContextMenu = new ContextMenu();
menu.hideBuiltInItems();
menu.customItems.push(new ContextMenuItem("Paste Image Clipboard", function(){
socket.send("getClipboard");
}));
function pasteImage(){
var d = root.getNextHighestDepth();
var mc = root.createEmptyMovieClip("d"+d,d);
mc._x = root._xmouse;
mc._y = root._ymouse;
mc.loadMovie("file://E:/temp.jpeg");
}
var socket:XMLSocket = new XMLSocket();
socket.onData = function(data){
if(data == "getClipboard") pasteImage();
}
socket.connect("localhost",12000);
var menu:ContextMenu = new ContextMenu();
menu.hideBuiltInItems();
menu.customItems.push(new ContextMenuItem("Paste Image Clipboard", function(){
socket.send("getClipboard");
}));
Si le développement continu au rythme prévu, JDIC devrait être intégré à la version finale de Mustang.
Commentaires
1. Le lundi 22 novembre 2004 à 18:07, par liguorien
2. Le mardi 23 novembre 2004 à 06:18, par kiroukou
3. Le mardi 23 novembre 2004 à 07:12, par liguorien
4. Le mercredi 1 décembre 2004 à 14:10, par xion
5. Le mercredi 1 décembre 2004 à 14:13, par xion
6. Le vendredi 29 juillet 2005 à 16:07, par Gerard
7. Le mercredi 5 avril 2006 à 16:35, par Jo
8. Le mercredi 5 avril 2006 à 19:30, par liguorien
9. Le jeudi 6 avril 2006 à 07:15, par ekameleon
10. Le jeudi 6 avril 2006 à 08:06, par liguorien
11. Le jeudi 6 avril 2006 à 13:34, par ekameleon
12. Le jeudi 6 avril 2006 à 13:52, par liguorien
13. Le jeudi 6 avril 2006 à 17:24, par Jo
14. Le lundi 18 décembre 2006 à 11:30, par BOB LE BRICOLEUR
15. Le lundi 18 décembre 2006 à 14:18, par liguorien
16. Le mercredi 10 janvier 2007 à 08:29, par bob le bricoleur
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.