|
|
|
|
Salut,
Tu doit aller dans MSDOS vas dans demrrer/excuter/et tape command puis click ok pour aller à la racine tape cd.. quand tu est dans la racine soit C:\tape edit autoexec.bat editeur apparait en bleu et faut rajouter un ligne de code qui est : path=C:\JDK ou SDK autre\bin puis enregistrer le fichier et redamarrer l'ordinateur. toto.java compiler avec javac.toto.java pour le fichier class. Joyeux noël et bonne année vlt |
|
Salut,
Est-ce que le serveur et le client sont une seule et même machine ? Si non, le serveur est-il derrière un firewall ? sfx
|
Salut et merci à tous,
vlt, j'ai déjà ajouter les cmd java dans la variable d'environnement PATH. Pour "toto.java compiler avec javac.toto.java pour le fichier class. " je ne vois pas le rapport. sfx, le client et le serveur sont sur la même machine, mais le but de ce programme car c'est du java avec RMI c'est que n'importe quel client puisse y accéder . idsp23, pour compiler un programme java, en ligne de commande tu tapes javac repertoireparent.nomduprogramme Sinon est ce que quell'un a réussi à décoder la soluce de mon probleme que j'ai trouvé sur le net? Gaëlle
|
|
configurer les variables d env sous windows :
tu ouvres c:\autoexec.bat tu ajoutes les lignes set path = %path%;= $jdk_home$\bin set classpath = $jdk_home$\lib\tools.jar;. ($jdk_home$= rep ou java est installe et . le rep courant) tu redemarre ensuite et maintenant tu peux compiler ou excuter tes classes a partir de n importe quel rep pour compiler ton prg a partir de msdos tu te places dans le rep qui contient tes classes par ex toto.java et tu tapes javac toto.java pour executer java toto (pas d extension !) tu peux utiliser un editeur de texte comme textpad (fait 1 recherche sur le web)qui est gratuit et vachement pratique pour deboguer et executer tes prg (tu regardes dans le menu tools\run tu changes le rep courant et les champs adequats) la ligne de commande est fastidieuse surtout quand tu fais trop d erreur |
bonsoir tout le monde et merci pour toutes vos réponses,
mais jevais devoir recentrer le sujet...je n'ai pas de probleme de varaible d'environnement et ttou et tout. je viens de créer mon 1er prog en java - rmi, point d'erreur à la compile ..mais une au lancement du serveur (tous les fichiers se trouvent sur la meme machine) : java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve) j'ai donc trouvé sur le net ce qui pourrait etre la solution mais du haut de mes 5 jours de java (c'est pour un projet pour mon école) je ne trouve pas ce que j'ai trouvé très claire..je demandais donc si quelqu'un saurait mexpliquer ce qui est dit dans le 1er msg de ce sujet en gras de façon claire. Si quelqu'un connait RMI (remote method invocation) merci de me faire un grand signe!! merci à tous et bisous Gaëlle
|
Salut,
merci à tous pour vos réponses, sfx je vais essayer ce que tu m'as dit ...idsp23 je ne connais pas la solution à ton problème... Merci également à la personne (désolée j'ai oublié le pseudo) qui m'as mit un lien vers un problème similaire. Je me penche dessus et je vous tiens au courant. A bientot Gaëlle |
Re les jeunes,
alors voilà j'ai effectué quelques modifications en fonction de ce que j'ai trouvé sur Internet mais j'ai toujours un problème.... j'ai modifié le java.policy avec la ligne permission java.net.SocketPermission "192.168.0.5:1024-", "listen,connect,resolve"; J'ai créé dans mon package le fichier SecurityManagerPermissif.java package rmidemo import java.rmi.*; import java.security.*; public class SecurityManagerPermissif extends RMISecurityManager { public void checkPermission(Permission p) { //ne fait rien } } Je l'ai compilé sans difficulté. Et j'ai modifié le main de mon fichier HelloImpl.java public static void main(String args[]) { if (System.getSecurityManager()== null) { System.setSecurityManager(new SecurityManagerPermissif()); } try{ HelloImpl obj = new HelloImpl("HelloServer"); Naming.rebind("//192.168.0.5:1000/HelloServer", obj); System.out.println("HelloServer enregistré dans le registry"); } catch (Exception e){ System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace(); } } } Quand je lance la commande: java -Djava.security.policy=policy rmidemo.SecurityManagerPermissif j'ai l'erreur suivante : Exception in thread "main" java.lang.NoSuchMethodError: main Je ne sais vraiment plus quoi faire... Un coup de main serait vraiment le bienvenu Gaëlle |
|
Salut Gaelle,
La méthode main n'est pas dans ta classe SecurityManagerPermissif mais dans la classe HelloImpl .... Tu dois donc executer le fichier rmidemo.HelloImpl et non SecurityManagerPermissif (qui est appelé par HelloImpl) sfx |
Re sfx, merci encore pour toutes réponses, ça me panique un peu moins , je me sens moins seule ;)
Alors j'ai donc éxecuter ceci C:\TEST>java -Djava.security.policy=policy rmidemo.HelloImpl et voici l'erreur (nouvelle ) Exception in thread "main" java.lang.Error: ProblÞme de compilation non rÚsolu : Erreur de syntaxe sur le mot clÚ "import"; ";" attendu at rmidemo.SecurityManagerPermissif.<init>(SecurityManagerPermissif.java :3) at rmidemo.HelloImpl.main(HelloImpl.java:21) pour la premier erreur à propos de import c'est bien rédigé je comprends pas, je te mets ci dessous le SecurityManagerPermissif package rmidemo import java.rmi.*; import java.security.*; public class SecurityManagerPermissif extends RMISecurityManager { public void checkPermission(Permission p) { //ne fait rien } } Poiur l'autre erreur dans le main, il est dans mon msg précédent mais je vois pas non plus pourquoi ça coinceet ce qu'il faut faire. Gaëlle
|
Merci sfx ,
bon après avoir corrigé cette erreur, voilà on msg qui revient : C:\TEST>java -Djava.security.policy=policy rmidemo.HelloImpl HelloImpl err: Connection refused to host: 192.168.0.5; nested exception is: java.net.ConnectException: Connection refused: connect java.rmi.ConnectException: Connection refused to host: 192.168.0.5; nested excep tion is: java.net.ConnectException: Connection refused: connect java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown S ource) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown S ource) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) at sun.rmi.server.UnicastRef.newCall(Unknown Source) at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source) at java.rmi.Naming.rebind(Unknown Source) at rmidemo.HelloImpl.main(HelloImpl.java:25) retour à la case départ on dirait! :( Gaëlle |
|
Salut,
Il me semble que le port que tu utilises n'est pas le même dans le fichier HelloImpl (port 1000) et le fichier java.policy (port 1024 et suivant) ... De plus, le port normalement utilisé par RMI est le 1099 ... As-tu essayé le port par defaut (1099) à la fois dans le fichier java.policy et la classe HelloImpl ? De plus, tu écris que le fichier qui gère les permissions s'appelle java.policy et dans la ligne de commande qui démarre le serveur, tu as écris 'policy' et non java.policy ... Et n'oublie pas d'arrêter et de redemarrer le rmiregistry à chaque fois que tu modifies et donc recompile tes classes (de même si tu modifies le fichier java.policy) J'espere que ça t'aideras ... sfx |
donc j'ai essayé en lancant rmiregistry sur le port 1000
C:\TEST>java -Djava.security.policy=policy rmidemo.HelloImpl HelloServer enregistrÚ dans le registry c'est bien ce que j'avais mis dans HelloImpl public static void main(String args[]) { // //cré et installe un security manager // if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManagerPermissif()); } try{ HelloImpl obj = new HelloImpl("HelloServer"); Naming.rebind("//192.168.0.5:1000/HelloServer", obj); System.out.println("HelloServer enregistré dans le registry"); } catch (Exception e){ System.out.println("HelloImpl err: " + e.getMessage()); e.printStackTrace(); } } } alors après je lance index.html parce que c'est fait avec un applet //HelloApplet.java // package rmidemo; import java.awt.Graphics; import java.rmi.Naming; public class HelloApplet extends java.applet.Applet { String message = ""; public void init() { try { Hello obj = (Hello)Naming.lookup("//" + getCodeBase().getHost() + "/HelloServer"); message = obj.sayHello(); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getMessage()); e.printStackTrace(); } } public void paint (Graphics g) { g.drawString(message, 25, 50); } } Il me dit que l'applet est démarré mais ya rien qui s'affiche et là ya une console java qui lance et dedans j'ai un msg d'erreur : HelloApplet exception: Connection refused to host: 192.168.0.5; nested exception is: java.net.ConnectException: Connection refused: connect java.rmi.ConnectException: Connection refused to host: 192.168.0.5; nested exception is: java.net.ConnectException: Connection refused: connect java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source) at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source) at sun.rmi.server.UnicastRef.newCall(Unknown Source) at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at java.rmi.Naming.lookup(Unknown Source) at rmidemo.HelloApplet.init(HelloApplet.java:10) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Tu me dis "De plus, tu écris que le fichier qui gère les permissions s'appelle java.policy et dans la ligne de commande qui démarre le serveur, tu as écris 'policy' et non java.policy ... "...euh..faudrait que j'écive quoi alors????? Gaëlle |
en tapant
java -Djava.security.policy=java.policy rmidemo.HelloImpl la meme erreur qu'au msg ci-dessus... ;( Merci pour ton attention sfx...je commence à désespérer là! Gaëlle |
|
Salut Gaelle,
Essaie de changer le numéro de port ... essaie avec 1099 ( les ports en dessous de 1024 posent un problème quelque fois ...) sfx |
|
Resalut,
Tu peux aussi modifier ton fichier java.policy en mettant comme unique permission celle-ci : grant { permission java.security.AllPermission; }; Ce qui donne tous les droits pour n'importe quel port ... c'est juste un test ... A ne surtout pas utiliser dans le cadre d'une appli réelle ... ;-)) @+ sfx |
Salut,
ça fonctionne en faisaint tout passer par le port 1099, merci :) Mais maintenant j'ai un autre problème, moi j'ai fait ça avec un applet mais en fait il faut un client applicatif tout court parce que le but c'est qu'à partir d'un autre poste et bien ça m'affiche Hello World...Je me mets sur le client de suite et je vous teins au courant, car je pense rencontrer (encore!!) des difficultées. Gaëlle |
Resalut,
voilà j'ai fait un client, enfin on m'avait fourni le code mais j'ai des petites erreurs dedans : //HelloMain.java // package rmidemo; import java.rmi.Naming; public class HelloMain { public static void main(String[] args) { try { Hello obj = (Hello)Naming.lookup("//"+args[0]+"/HelloServer"); message = obj.sayHello(); System.out.println("Le message est: "+message); } catch (Exception e) { System.out.println("HelloMain exception: "+e.getMessage()); e.printStackTrace(); } } } Les erreurs sont à aux lignes suivantes: message = obj.sayHello(); System.out.println("Le message est: "+message); on me dit que message ne peut pas être résolu :( Gaëlle |
Resalut,
voilà j'ai fait un client, enfin on m'avait fourni le code mais j'ai des petites erreurs dedans : //HelloMain.java // package rmidemo; import java.rmi.Naming; public class HelloMain { public static void main(String[] args) { try { Hello obj = (Hello)Naming.lookup("//"+args[0]+"/HelloServer"); message = obj.sayHello(); System.out.println("Le message est: "+message); } catch (Exception e) { System.out.println("HelloMain exception: "+e.getMessage()); e.printStackTrace(); } } } Les erreurs sont à aux lignes suivantes: message = obj.sayHello(); System.out.println("Le message est: "+message); on me dit que message ne peut pas être résolu :( Gaëlle
|
Résultats pour Débutante JAVA : Erreur
Résultats pour Débutante JAVA : Erreur
Résultats pour Débutante JAVA : Erreur
Résultats pour Débutante JAVA : Erreur