Aller au contenu

au secours erreur java incomprehensible


harold50

Messages recommandés

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

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

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

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

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

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 :D

Lien vers le commentaire
Partager sur d’autres sites

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...