Partage
  • Partager sur Facebook
  • Partager sur Twitter

problem avec une applet

    26 octobre 2008 à 15:51:12

    bonjour, je suis entrain de créer un projet dans je doit utilisé une applet,bon ce projet je doit utiliser des bibliothèque externe du HttpClient l'applet s'exécute bien dans Eclipse mais je n'arrive pas a la faire fonctionner dans le navigateur (je crois que le problème est lie au bibliothèque externe .. mais je n'arrive pas a le resoudre) .. j'ai cherché pendant 2 jours mais j'ai pas trouver des résultats.


    code source de l'applet:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import javax.swing.JApplet;
    import javax.swing.JLabel;
    import org.apache.commons.httpclient.*;
    import org.apache.commons.httpclient.methods.*;
    import org.apache.commons.httpclient.params.HttpMethodParams;
    
    import java.io.*;
    
    public class getSource extends JApplet{
      
      private static String url = "http://www.exemple.com/page?var=valeur";
      private JLabel label = new JLabel();
    
      public void init(){
    		this.setSize(300, 80);
    		label.setHorizontalAlignment(JLabel.CENTER);
    		label.setForeground(Color.blue);
    		
    		this.getContentPane().add(label, BorderLayout.NORTH);
    		HttpClient client = new HttpClient();
    		GetMethod method = new GetMethod(url);
    		method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
    		try {
    				int statusCode = client.executeMethod(method);
    
    				if (statusCode != HttpStatus.SC_OK) {
    					System.err.println("Method failed: " + method.getStatusLine());
    				}
    
    				byte[] responseBody = method.getResponseBody();
    				System.out.println(new String(responseBody));
    				label.setText(new String(responseBody));
    
    		} catch (HttpException e) {
    				System.err.println("Fatal protocol violation: " + e.getMessage());
    				e.printStackTrace();
    		} catch (IOException e) {
    				System.err.println("Fatal transport error: " + e.getMessage());
    				e.printStackTrace();
    		} finally {
    			method.releaseConnection();
    		}  
      }
    }
    


    code source de la page:
    <html>
    
    	<body style="margin:auto;">
    		
    
    		<div style="width:320px;margin:auto;margin-top:20px;border:5px solid black">
    			<applet  mayscript="true" codebase="bin/" code="getSource.class" height="80" width="300" hspace="10" vspace="10" name="first">
    			</applet>
    		</div>
    		
    	</body>
    </html>
    


    le fichier .classpath :
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
    	<classpathentry kind="src" path="src"/>
    	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-codec-1.3.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-httpclient-3.1.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-logging-1.1.1.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-logging-1.1.1-javadoc.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-logging-1.1.1-sources.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-logging-adapters-1.1.1.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-logging-api-1.1.1.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/commons-logging-tests.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/junit-4.5.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/junit-4.5-src.jar"/>
    	<classpathentry kind="lib" path="D:/Java/getSource/lib/junit-dep-4.5.jar"/>
    	<classpathentry kind="output" path="bin"/>
    </classpath>
    


    Citation : Erreur dans la console Java


    java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpException
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
    at java.lang.Class.getConstructor0(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at sun.applet.AppletPanel.createApplet(Unknown Source)
    at sun.plugin.AppletViewer.createApplet(Unknown Source)
    at sun.applet.AppletPanel.runLoader(Unknown Source)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Caused by: java.lang.ClassNotFoundException: org.apache.commons.httpclient.HttpException
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 10 more



    j'aimerai vous signaler que je débutant en java donc c'est quelqu'un voulez m'aidé quel la prend en considération et merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      27 octobre 2008 à 9:04:53

      Si tu fais une applet, c'est pour la mettre dans un page web et donc pas sur ta machine personnelle !
      Les chemins d'accès à tes classes sont tous absolus !
      Exemple 1 :

      D:/Java/getSource/lib/commons-logging-1.1.1.jar

      Si tu mets cette page sur un serveur distant, ou crois-tu que l'applet va chercher les classes lorsque quelqu'un va essayer de l'utiliser... Sur son poste ! !
      Hors, à moins que tu es signé ton applet, elle n'a pas le droit d'accéder aux disques du client...

      Je ce que je te conseil de faire, c'est de créer un dossier lib à côté du dossier src de ton projet Eclipse et là tu fais clic droit, configure path / add external archive et tu choisi le dit dossier.

      Et, lorsque tu mettras ton applet dans une page web, tu mettras aussi le dossier lib à côté de ton applet en respectant bien la hiérarchie des dossiers !
      Il faudra peu être spécifier, dans le code HTML, l'endroit ou ton applet doit trouver les archives... Mais essaies déjà comme ça.
      • Partager sur Facebook
      • Partager sur Twitter
        27 octobre 2008 à 13:22:43

        tout d'abord je vous remercie pour ton réponse, bon j'ai suivie les instruction et j'ai utiliser l'attribut ARCHIVE pour spécifier au ils sont les JAR externe mais j'ai rencontrer un autre problème c au niveau du sécurité le console du navigateur m'affiche :

        Citation : Console Java


        java.security.AccessControlException: access denied (java.net.SocketPermission www.exemple.com resolve)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkConnect(Unknown Source)
        at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source)
        at java.net.InetAddress.getAllByName0(Unknown Source)
        at java.net.InetAddress.getAllByName(Unknown Source)
        at java.net.InetAddress.getAllByName(Unknown Source)
        at java.net.InetAddress.getByName(Unknown Source)
        at java.net.InetSocketAddress.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80)
        at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122)
        at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
        at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
        at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
        at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
        at getSource.init(getSource.java:26)
        at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
        Exception : java.security.AccessControlException: access denied (java.net.SocketPermission www.exemple.com resolve)



        J'ai chercher et j'ai trouver que je doit signer mon applet ,j'ai réussi a créer la certificat avec la commande keytool ,mais quand je veux signer les jar n'arrive pas a executer la commande jarsigner la console (MSDOS) me dit quelle n'est pas reconnu comme une commande interne.

        j'apprécie bcp votre aide.
        • Partager sur Facebook
        • Partager sur Twitter
          27 octobre 2008 à 14:06:51

          Est-ce qu'à un moment tu essaies d'accéder à la machine du client avec ton applet ?
          Parce que si ce n'est pas le cas, c'est que tu as encore des chemins absolus vers des archives quelque part...
          • Partager sur Facebook
          • Partager sur Twitter
            27 octobre 2008 à 16:29:29

            non je n'essaie pas d'accéder a la machine du client, bon je vais détailler l'idée de mon projet ,il s'agit d'une application de référencement il te donnent la positionnement de votre site dans les moteurs de recherche (ex: yahoo,live,google,altavista ...) pour des mots clé donnait donc l'utilisateur saisi sont site et les mots clés quel veut après il choisi les moteurs de recherche dont les quels il veut voir le positionnement de sont site .dans le cote programmation je doit prendre les variable que l'utilisateur saisi et envoyé une requette a chaque moteur puis avoir le code source de la page des résultats et chercher dedans sur le site le reste est claire. je ne peut pas utiliser du PHP car je veut que la requette s'execute a partir du machine de client ,les API aussi je peut pas les utiliser (la plupart des moteur non pas d'API) ,et en Javascript et Actionscript ce n'est pas possible (problèmes de sécurité) donc j'ai décider de le faire en Java (applet).

            le problem que je rencontre en ce me moment c comment signé mon applet (j'ai creer la certificat avec la commande keytool mais j n'arrive pas a signé les JAR aver la commande jarsigner, j'ai fait des recherche et je ne trouve que les même tutoriel c a dire les commandes a utiliser ).

            donc c vous pouvez m'indiquer le chemin au bien me donner d'autre idées que celle que je viens d'utiliser ça m'aiderai vraiment, merci d'avance.
            • Partager sur Facebook
            • Partager sur Twitter
              27 octobre 2008 à 16:44:17

              Si tu n'as pas besoin d'accéder au poste du client il est inutile de signé ton applet !
              Tu dois avoir un problème de classpath qui traine...
              • Partager sur Facebook
              • Partager sur Twitter
                27 octobre 2008 à 20:19:58

                mais d'après l'erreur il m'indique que c'est un erreur de sécurité. si vous avez un code source pour une fonction similaire son problème dans les applet passe le moi svp.
                • Partager sur Facebook
                • Partager sur Twitter
                  27 octobre 2008 à 22:58:27

                  Essaye d'abord de faire signer ton applet, pour la commande jarsigner, va ajouter dans les variables d'environnement une variable PATH qui contient le dossier d'installation de ta jdk:
                  -[JAVA_HOME]/bin/
                  après cela tu lance l'invite de commande et tu execute jarsigner.

                  pour ajouter les variables d'envir tu vas dans panneau de configuration--> systeme-->avancé-->variable d'envirronnement --> Nouveau. essaie d'abord coe ça et si ça ne marche pas tu fait signe
                  • Partager sur Facebook
                  • Partager sur Twitter
                  J'ai tous les badges d'OpenClassrooms.

                  problem avec une applet

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown