March 12, 200817 yr 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? Edited March 12, 200817 yr by harold50
March 12, 200817 yr 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 ?
March 13, 200817 yr Author 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
March 13, 200817 yr 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
March 13, 200817 yr Author 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.
March 13, 200817 yr 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 :)
March 13, 200817 yr 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...)
March 13, 200817 yr Author 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?
March 13, 200817 yr 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
March 13, 200817 yr 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 ?
March 14, 200817 yr Author 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?
Archived
This topic is now archived and is closed to further replies.