Applet java ne se lance pas

Messages postés
2
Date d'inscription
dimanche 12 décembre 2010
Statut
Membre
Dernière intervention
23 mars 2011
- - Dernière réponse : cs_marchombre
Messages postés
2
Date d'inscription
dimanche 12 décembre 2010
Statut
Membre
Dernière intervention
23 mars 2011
- 23 mars 2011 à 16:43
Bonjour,
je suis actuellement en stage et je dois créer un applet java permettant aux utilisateurs de la page web de pouvoir faire une impression écran et de pouvoir directement la coller sur le site (en copiant ce que l'utilisateur a dans son clipboard). Il dois fonctionner avec Firefox ET Internet Explorer.

Mon applet fonctionne sans problème en le lançant avec éclipse. Mais lors de son lancement en l'appelant depuis un script html/php cela ne fonctionne pas.

J'ai réalisé un .jar executable de mon applet (fonctionne sur mon ordinateur) et je l'ai signé (obligatoire puisque je dois accéder au clipboard de l'utilisateur) avec l'application : lien de l'appli

J'ai vérifier tous les paramètres de mes navigateurs (accepte script JAVA, les plugins Java....). Je vide a chaque test mes caches du navigateur et utilise la ligne de commande :
javaws -uninstall


Le code de mon unique .java avec lequel j'ai créer le .jar :

 
package test;
 
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.FlavorEvent;
import java.awt.datatransfer.FlavorListener;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.TransferHandler;
 
public class Main {
 
    private static BufferedImage toBufferedImage(Image image) {
        if (image == null) {
            return null;
        } else if (image instanceof BufferedImage) {
            return (BufferedImage) image;
        }
        BufferedImage result = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = result.createGraphics();
        try {
            g.drawImage(image, 0, 0, null);
        } finally {
            g.dispose();
        }
        return result;
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
 
            /**
             * {@inheritDoc}
             */
            @Override
            public void run() {
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                final ImageView imageView = new ImageView();
                final Action pasteAction = new AbstractAction() {
 
                    /**
                     * {@inheritDoc}
                     */
                    @Override
                   public void actionPerformed(ActionEvent e) {
                        System.out.println("Pasting image");
                        pasteImage(imageView);
                    }
                };
                pasteAction.putValue(Action.NAME, "Paste");
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                JToolBar toolBar = new JToolBar();
                toolBar.add(pasteAction);
                frame.setLayout(new BorderLayout());
                frame.add(toolBar, BorderLayout.NORTH);
                frame.add(imageView, BorderLayout.CENTER);
                frame.setSize(500, 500);
                frame.setVisible(true);
                Clipboard clipboard = toolkit.getSystemClipboard();
                clipboard.addFlavorListener(new FlavorListener() {
 
                    /**
                     * {@inheritDoc}
                     */
                    @Override
                    public void flavorsChanged(FlavorEvent e) {
                        System.out.println("Flavor changed in clipboard");
                        testEnableAction(pasteAction);
                    }
                });
                testEnableAction(pasteAction);
            }
        });
    }
 
    private static void pasteImage(ImageView imageView) {
        try {
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Clipboard clipboard = toolkit.getSystemClipboard();
            DataFlavor[] flavors = clipboard.getAvailableDataFlavors();
            for (DataFlavor flavor : flavors) {
                if (DataFlavor.imageFlavor.equals(flavor)) {
                    Image image = (Image) clipboard.getData(flavor);
                    imageView.image = toBufferedImage(image);
                    imageView.repaint();
                    break;
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
 
    private static void testEnableAction(Action action) {
        try {
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Clipboard clipboard = toolkit.getSystemClipboard();
            action.setEnabled(false);
            DataFlavor[] flavors = clipboard.getAvailableDataFlavors();
            for (DataFlavor flavor : flavors) {
                if (DataFlavor.imageFlavor.equals(flavor)) {
                    action.setEnabled(true);
                    break;
                }
            }
        } // Ignore.
        catch (IllegalStateException ex) {
        }
    }
 
    private static class ImageView extends JComponent {
 
        private DataFlavor[] supportedFlavors = {
            DataFlavor.imageFlavor,
            DataFlavor.javaFileListFlavor
        };
        BufferedImage image;
 
        public ImageView() {
            // Drag and drop - import support.
            setTransferHandler(new TransferHandler() {
 
                /**
                 * {@inheritDoc}
                 */
                @Override
                public boolean canImport(TransferSupport support) {
                    DataFlavor[] flavors = support.getDataFlavors();
                    boolean result = false;
                    for (DataFlavor flavor : flavors) {
                        for (DataFlavor supportedFlavor : supportedFlavors) {
                            if (supportedFlavor.equals(flavor)) {
                                result = true;
                                break;
                            }
                        }
                        if (result) {
                            break;
                        }
                    }
                    return result;
                }
 
                /**
                 * {@inheritDoc}
                 */
                @Override
                public boolean importData(TransferSupport support) {
                    boolean result = false;
                    try {
                        Transferable transferable = support.getTransferable();
                        for (DataFlavor supportedFlavor : supportedFlavors) {
                            if (transferable.isDataFlavorSupported(supportedFlavor)) {
                                Object data = transferable.getTransferData(supportedFlavor);
                                if (DataFlavor.imageFlavor.equals(supportedFlavor)) {
                                    System.out.println("Image drag and drop");
                                    image = toBufferedImage((Image) data);
                                    repaint();
                                    break;
                                } else {// if (DataFlavor.imageFlavor.equals(javaFileListFlavor)) {
                                    System.out.println("File drag and drop");
                                    List<File> files = (List<File>) data;
                                    System.out.println("There are "+files.size()+" files being dragged.");
                                    for (File file : files) {
                                        try {
                                            image = ImageIO.read(file);
                                            repaint();
                                            break;
                                        } catch (Exception ex2) {
                                            System.err.println(""" + file.getAbsolutePath() + "" is not an image file.");
                                        }
                                    }
                                }
                                result = true;
                            }
                        }
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                    return result;
                }
            });
        }
 
        /**
         * {@inheritDoc}
         */
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (image != null) {
                g.drawImage(image, 0, 0, null);
            }
        }
    }
}
 


Le code du MANIFEST.MF :
Manifest-Version: 1.0
Class-Path: .
Main-Class: test.Main

Name: test/Main$1.class
SHA1-Digest: n/O6/1NNlNa+PZSy8ZYKYnnuEgM=

Name: test/Main$1$1.class
SHA1-Digest: vG1cUz4f35fnVr/WizcAjnT2dAM=

Name: test/Main$ImageView.class
SHA1-Digest: ukYNx/eabOUcm9VOWEDjv98Fjt0=

Name: test/Main.class
SHA1-Digest: ldbjWH8j7BsnwOSt7U+3Qk33B/A=

Name: test/Main$ImageView$1.class
SHA1-Digest: RpEBNxF8UW+DdfO2B7qG05x7BHw=

Name: test/Main$1$2.class
SHA1-Digest: s8dYyrxLrVdC/mhUtExgroeln7g=


et le code de ma page web :
<html>
<head>
<title>Clipboard image</title>
</head>




 Votre navigateur n'est pas compatible Java !




Attention les yeux ?



</html>


Ma page affiche le logo de chargement java qui tourne en boucle sans charger...
Dois-je mettre le paramètre "code="test/Main" dans l'html qui lance l'applet ? (puisque c'est un applet executable sa ne devrait pas etre utili non ? Et si je le met il ne trouve pas le chemin et affiche une exection)

Je suis vraiment bloqué donc j'attends votre aide avec impatience ;)
Toute idée pour m'aiguiller est la bienvenue !
Merci
Afficher la suite 

2 réponses

Messages postés
11
Date d'inscription
jeudi 28 août 2008
Statut
Membre
Dernière intervention
31 mars 2011
0
Merci
Bonjour,
j'ai déjà eu un problème similaire avec mon applet mais j'ai du rajouté le chemin et aussi la balise code pour que sa marche. Mais dans mon serveur Web à partir duquel je lance mon applet je n'ai que le test.jar et sa marche bien. J'espère t'avoir un peu aidée.


                          
Commenter la réponse de bbagnes
Messages postés
2
Date d'inscription
dimanche 12 décembre 2010
Statut
Membre
Dernière intervention
23 mars 2011
0
Merci
Bonjour,
Merci de m'aider ;)

J'ai essayé ta méthode et ça marche nickel !
J'ai aussi du rajouter une fonction init() qui comprend ma fonction run() (juste pour qu'il soit content car c'est un applet).
Sinon ça ne fonctionnait pas.
Commenter la réponse de cs_marchombre