[noob]Pb lancement bat avec jbutton

fred33_1727
[noob]Pb lancement bat avec jbutton

Bonjour,
J'utilise eclipse et j'ai cree une petite appli de test avec visual editor.
J'essaye de lancer un fichier bat creer avec Talend mais j'ai une erreur au lancement (alors que si je lance un exe pas de pb).
code derriere le bouton

String[] cmd = new String[3];
						cmd[0]= "cmd.exe";
						cmd[1]= "/C";
						cmd[2]= "C:\\ETL\\testpgmjava\\TestPgmJava\\TestPgmJava_run.bat";
						Runtime rt = Runtime.getRuntime();
						final Process proc2 = rt.exec(cmd);

et voici le massage d'erreur

erreur : java.lang.NoClassDefFoundError: projet_corep/testpgmjava/TestPgmJava

erreur : Caused by: java.lang.ClassNotFoundException: projet_corep.testpgmjava.TestPgmJava

erreur : at java.net.URLClassLoader$1.run(Unknown Source)

erreur : at java.security.AccessController.doPrivileged(Native Method)

erreur : at java.net.URLClassLoader.findClass(Unknown Source)

erreur : at java.lang.ClassLoader.loadClass(Unknown Source)

erreur : at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)

erreur : at java.lang.ClassLoader.loadClass(Unknown Source)

erreur : at java.lang.ClassLoader.loadClassInternal(Unknown Source)

erreur : Exception in thread "main"

Voici la ligne de commande du fichier bat generer par Talend

java -Xms256M -Xmx1024M -cp ../lib/jt400.jar;../lib/jxl.jar;../lib/systemRoutines.jar;../lib/userRoutines.jar;.;testpgmjava.jar;../lib; projet_corep.testpgmjava.TestPgmJava --context=Default

Les jar sont bien dans le rep lib et la class est bien dans projet_corep\testpgmjava

Quelqu'un pourrait il m'aider
Merci

fredericmazue

Quote:
Quelqu'un pourrait il m'aider

Oui
Ton lancement de bat, tu ne le fais pas correctement. Lancer un exe, un bat ou autre en Java se fait selon des règles précises. Ca a été traité au moins 10 fois sur ce forum, y compris récemment, si tu fais des recherches tu vas trouver.
Au strict minimum, il manque
proc2.waitFor();
Mais même avec ça, ça ne fonctionnera probablement pas correctement à moins que ton bat soit extrêment rudimentaire

Mais en attendant

Quote:
erreur : java.lang.NoClassDefFoundError: projet_corep/testpgmjava/TestPgmJava

Ca ne peut pas être plus clair. La classe TestPgmJava n'est pas pointée par le CLASSPATH
Quote:
Les jar sont bien dans le rep lib et la class est bien dans projet_corep\testpgmjava

Il faut croire que non...
Tu as fais une erreur quelque part.
fred33_1727
re

J'ai bien lu le programmez 82, mais....
voici mon code complet

try {
						String[] cmd = new String[3];
						cmd[0]= "cmd.exe";
						cmd[1]= "/C";
						cmd[2]= "C:\\ETL\\testpgmjava\\TestPgmJava\\TestPgmJava_run.bat";
						Runtime rt = Runtime.getRuntime();
						final Process proc2 = rt.exec(cmd);
						proc2.waitFor();
						new Thread() {
							public void run() {
								try {
									BufferedReader reader = new BufferedReader(new InputStreamReader(proc2.getInputStream()));
									@SuppressWarnings("unused")
									String line = "";
									try {
										while((line = reader.readLine()) != null) {
											// Traitement du flux de sortie de l'application si besoin est
											
										}
									} finally {
										reader.close();
									}
								} catch(IOException ioe) {
									ioe.printStackTrace();
								}
							}
						}.start();

//						 Consommation de la sortie d'erreur de l'application externe dans un Thread separe
						new Thread() {
							public void run() {
								try {
									BufferedReader reader = new BufferedReader(new InputStreamReader(proc2.getErrorStream()));
									@SuppressWarnings("unused")
									String line = "";
									try {
										while((line = reader.readLine()) != null) {
											// Traitement du flux d'erreur de l'application si besoin est
											System.out.println("erreur : "+line+"\n");
										}
									} finally {
										reader.close();
									}
								} catch(IOException ioe) {
									ioe.printStackTrace();
								}
							}
						}.start();
					} catch (Exception e3) {
						// TODO: handle exception
						e3.printStackTrace();
					}
					}
				});
			}
		return jButton2;

je confirme bien la presence de ma classe, par contre ce pgm java n'est pas dans la meme repertoire que le pgm Talend
je debute alors je crois bien que c'est effectivement un probleme de classpath, comment le resoudre ???

fredericmazue

Quote:
J'ai bien lu le programmez 82, mais....

Bravo :)

Quote:
voici mon code complet

Quoique tu n'as pas si bien lu que ça, sinon tu aurais mis waitFor() APRES la lancement des threads (comme c'est fait dans Programmez:! 82 ;) ) et non avant.
Si tu mets waitFor() avant ça les threads ne servent à rien du tout et tu auras sans doute un pb à l'exécution.

Quote:
je confirme bien la presence de ma classe

Mais non.
Quote:
je crois bien que c'est effectivement un probleme de classpath

Mais oui.
Hier j'ai lu rapidement ton post. Sans doute trop :oops:
Donc la classe pas trouvée est cherchée depuis le fichier bat si je comprends.
Et elle est dans testpgmjava.jar
Tu nous racontes que tous les jars sont dans un répertoire lib.
Mais pour testpgmjava.jar, la ligne de commande c'est -cp testpgmjava.jar donc la JVM va chercher le jar dans ce que Eclipse lui dit être le répertoire courant. Je crois que tu as une petite surprise là :)

Si vraiment testgmpjava.jar est dans lib, le mieux est de corriger le script ainsi:

java -Xms256M -Xmx1024M -cp ../lib/jt400.jar;../lib/jxl.jar;../lib/systemRoutines.jar;../lib/userRoutines.jar;.;../lib/testpgmjava.jar;../lib; projet_corep.testpgmjava.TestPgmJava --context=Default 

Ah le CLASSPATH....