harold50 Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 Bonjour en executant un code java que voilà import java.io.File; import java.io.PrintWriter; import java.util.Scanner; public class Test2 { public static void main(String[] args) throws Exception { //execution du script Process proc = Runtime.getRuntime().exec("/bin/csh " + "/home/harold.script.sh"); //recuperation de stdout Scanner sc = new Scanner(proc.getInputStream()); //lecture while(sc.hasNextLine()) { System.out.println(sc.nextLine()); } sc.close(); } private static void makeScript(File f) throws Exception { PrintWriter pw = new PrintWriter(f); pw.println("#!/bin/csh"); pw.println(); pw.println("cat /proc/cpuinfo"); pw.println(); pw.flush(); pw.close(); } } j'ai eu cette erreur et je n'y comprends rien Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class: Test2 at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0) at java.lang.Class.initializeClass() (/usr/lib/libgcj.so.5.0.0) at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0) at java.lang.Class.forName(java.lang.String) (/usr/lib/libgcj.so.5.0.0) at gnu.gcj.runtime.FirstThread.run() (/usr/lib/libgcj.so.5.0.0) at _Jv_ThreadRun(java.lang.Thread) (/usr/lib/libgcj.so.5.0.0) at _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib/libgcj.so.5.0.0) at __gcj_personality_v0 (/home/harold/java.version=1.4.2) at __libc_start_main (/lib/tls/libc-2.3.4.so) at _Jv_RegisterClasses (/home/harold/java.version=1.4.2) Caused by: java.lang.ClassNotFoundException: java.util.Scanner not found in [file:/usr/share/java/libgcj-3.4.5.jar, file:./, core:/] at java.net.URLClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0) at gnu.gcj.runtime.VMClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0) at java.lang.ClassLoader.loadClass(java.lang.String, boolean) (/usr/lib/libgcj.so.5.0.0) at _Jv_FindClass(_Jv_Utf8Const, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0) at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0) at _Jv_BytecodeVerifier.verify_instructions_0() (/usr/lib/libgcj.so.5.0.0) at _Jv_VerifyMethod(_Jv_InterpMethod) (/usr/lib/libgcj.so.5.0.0) at _Jv_PrepareClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0) at _Jv_WaitForState(java.lang.Class, int) (/usr/lib/libgcj.so.5.0.0) at java.lang.VMClassLoader.linkClass0(java.lang.Class) (/usr/lib/libgcj.so.5.0.0) at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0) ...9 more pour precision le code tourne sur un serveur Linux et il doit normalement me permettre d'executer un script Linux. que signifie cette erreur et comment la corriger? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 12 mars 2008 Partager Posté(e) le 12 mars 2008 A vue de nez, parce que : 1. soit tu n'as pas compilé ton code source 2. soit tu n'as pas inclus la classe compilée dans ton classpath d'exécution Peux-tu indiquer comment tu as compilé et lancé ce code ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 13 mars 2008 Auteur Partager Posté(e) le 13 mars 2008 A vue de nez, parce que :1. soit tu n'as pas compilé ton code source 2. soit tu n'as pas inclus la classe compilée dans ton classpath d'exécution Peux-tu indiquer comment tu as compilé et lancé ce code ? si je l'ai compilé en utilisant javac et il n'y avait pas d'erreur. et je l'ai executé en tapant java le nom de la class Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 C'est bien ce que je dis, la machine virtuelle Java n'a pas trouvé ta classe car elle n'est pas dans le classpath. Essaie avec : java -cp . Test2 Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 13 mars 2008 Auteur Partager Posté(e) le 13 mars 2008 C'est bien ce que je dis, la machine virtuelle Java n'a pas trouvé ta classe car elle n'est pas dans le classpath. Essaie avec : java -cp . Test2 voila ce que j'ai comme message Usage: gij [OPTION] ... CLASS [ARGS] ... to invoke CLASS.main, or gij -jar [OPTION] ... JARFILE [ARGS] ... to execute a jar file Try `gij --help' for more information. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 Je vois, tu n'as pas les outils standard Sun... Je pense que sur ta machine, "javac" et "java" sont des alias pour "gcj" et "gij". Et apparemment "gij" n'a pas les mêmes options de ligne de commande que "java"... Dans ce cas essaie avec : gij -classpath . Test2 Le plus simple est quand même d'utiliser les outils standard Sun, pour avoir les options "normales" et surtout pour pouvoir utiliser les dernières nouveautés du langage. Enfin tu fais comme tu veux :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 C'est bizarre parce que gij prend les mêmes options que le jre de sun. Enfin "gij -cp $classpath MaClasse" ça marche, c'est une certitude absolue (je le fais tous les jours...) Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 13 mars 2008 Auteur Partager Posté(e) le 13 mars 2008 C'est bizarre parce que gij prend les mêmes options que le jre de sun. Enfin "gij -cp $classpath MaClasse" ça marche, c'est une certitude absolue (je le fais tous les jours...) j'ai pourtant telecharger la derniere version du jre sur le site de sun! avez vous un lien ou je pourrai telecharger la vraie derniere version de Jre? Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 ah, c'est sans doute un problème d'alternatives, alors. Dans un premier temps, essayes avec le chemin absolu de java (un truc style /opt/sun-jdk-1.6.0.04/bin/java) et si ça marche, regarde comment on configure les alternatives sur ta distrib pour que /usr/bin/java pointe vers l'utilitaire de sun et pas gij. Cependant, gij marche très bien dans la majorité des cas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 13 mars 2008 Partager Posté(e) le 13 mars 2008 Ouaip, faut régler les alternatives alors, pour que "java" pointe bien vers le binaire livré avec le JDK Sun, et pas vers gij. Mais comme dit lorinc, normalement dans ton cas ça ne devrait pas changer grand-chose. Je penche toujours pour un problème de classpath. Peux-tu nous coller exactement la ligne de commande que tu utilises pour lancer ta classe, et qui te donne l'erreur ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 14 mars 2008 Auteur Partager Posté(e) le 14 mars 2008 Ouaip, faut régler les alternatives alors, pour que "java" pointe bien vers le binaire livré avec le JDK Sun, et pas vers gij.Mais comme dit lorinc, normalement dans ton cas ça ne devrait pas changer grand-chose. Je penche toujours pour un problème de classpath. Peux-tu nous coller exactement la ligne de commande que tu utilises pour lancer ta classe, et qui te donne l'erreur ? javac nom_de_fichier.java mais le probleme ne se pose pas à la compilation mais plutot à l'execution (java nom_de_la_classe)mais avec un autre code java j'ai pas eu d'erreur mais le script linux ne s'est pas executé. si je comprends bien vos explications je devrait avoir la meme erreur pour tous les programmes que je compile? sinon que dois je faire pour régler le probleme? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.