Bonsoir à tous,
je souhaite compiler un fichier .java avec javac dans mon application(comme sous dos), comment faire?
MERCI
Bonsoir à tous,
je souhaite compiler un fichier .java avec javac dans mon application(comme sous dos), comment faire?
MERCI
Salut,
tu peux utilisé la méthode exec de la classe Runtime.
ok, merci,
je vais tester
Je viens de tester avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Process proc = Runtime.getRuntime().exec(exe);Mais ca ne fait rien. Je ne vois meme pas mon fichier erreur.log.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 où exe= javac -classpath "C:\Applications\messages.jar;C:\Applications\projet.jar" Monfichier.java 2>erreur.log
Merci pour votre aide futur.
PS: je fichier erreur.log va bien se mettre ds le meme repectoire que monfichier.java?
Normalement, non...Envoyé par Terminator
Il va se mettre dans le répertoire courant.
Reste à savoir quel est ton répertoire courant.
Pareil pour ton fichier java, si il n'est pas dans le répertoire courant, ça ne marchera pas.
Donc soit tu t'assures d'être dans le bon répertoire quand tu lances ta commande, soit tu donnes les chemins complets...
ahhh ok,
Mais ds mon programme( graphique) , lorsque je sauve qlq chose, il se met dans le dossier du programme en question!!
Comment ca se fait?
De plus, pour récuperer le dossier courant, comment faire?
MERCI DE TON AIDE
Ben alors c'est bon, le répertoire courant est celui de ton appli.Envoyé par Terminator
Ton fichier java est dans le même répertoire? Si oui, ça devrait être bon.
Reste à savoir si ta commande fait bien ce qu'elle devrait...
Euh... comme ça, à froid, tu crées un objet File en donnant juste le nom du fichier au constructeur, et tu récupères le chemin avec getAbsolutePath()...Envoyé par Terminator
ok, le repectoire courant j'ai mis:
et ca marche tres bien (j'ai vérifié via un system.out.print(rectoireApplication)
Code : Sélectionner tout - Visualiser dans une fenêtre à part String repectoireApplication=System.getProperty("user.dir")+"\\";
Mais voila, ca ne fair tjrs rien, je ne vois pas mon err.log?!
Mais je me demande comment faire, quelle est la ligne de commande exacte à taper??
j'ai mis ca:
javac -classpath "C:\Applications\messages.jar;C:\Applications\projet.jar" c:\Monappli\Monfichier.java 2>c:\Monappli\
erreur.log
Mais est-ce ainsi?
MERCI
EDIT: au fait, c'est via ce forum qu'on m'a dit que pour lancer une ligne de commande (au fait, je veux compiler un fichier java et mettre ces erreurs dans un fichiers log que je pourrait utiliser). Donc on m'a dit de mettre:
Process proc = Runtime.getRuntime().exec(exe);
où exe est ce que j'ai mis au dessus.
EDIT2: je me demande su l'erreur de vient pas du process???!!!
Je vais poster un truc pour confirmer ca!!
Fais attention dans la définition de ta variable exe, avec les \ et les "... tapé comme ça, ça ne passera pas...
Ensuite, il faut faire attention avec les commandes paramétrées... il y a plusieurs manières de lancer la méthode exec()...
Et finalement, je sens que tu ne peux pas utiliser la redirection des flux de cette manière avec exec(). Il va falloir utiliser getErrorStream() de la classe Process d'après moi. Mais bon, je ne maitrise pas trop la choses en détail...
Et ne pas mettre le chemin vers le fichier java, sinon le compilo va considérer ça comme un package...
ok, merci pour tes reponses.
Je vais chercher de mon coté.
N'hésitez pas à me donner des indices...Tout est le bienvenue
Salut,
C'est normal puisque les redirection ne fonctionne pas comme cela : c'est le shell du système qui les gère, mais pas la classe Runtime...Envoyé par Terminator
Ici 2>erreur.log est passé à javac comme un simple paramètre, qui sera interprété comme un nom de fichier...
Pour récupérer la sortie du programme (stdout et stderr), tu dois utiliser les méthode getInputStream() et getErrorStream() de ton Process...
Tu trouveras plus de détail dans ce message : http://www.developpez.net/forums/sho...835#post633835
a++
Salut,
ben moi aussi j'ai des poblèmes avec des comandes dos,
Par exemple je voudrai imprimer un fichier texte que j'ai préalablement écrit, je fais donc :
avec tmp.txt un fichier à imprimer, situé dans le répertoire courant (ie le répertoire où se trouve ce programme java)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Process printProcces = Runtime.getRuntime().exec("print tmp.txt");
Mais ça ne fonctionne pas, ni avec print, ni essayer de le supprimer avec un simple del...
Enfin voilà, problème...
exec() ne fonctionne que pour lancer des programmes, par pour lancer des commandes de cmd.exe....Envoyé par Razgriz
Je sais, c'est subtil, mais il faut savoir ce que l'on fait... del n'est pas un programme windows, c'est une commande de la fenêtre de... commandes!
Si tu veux lancer tes commandes, il faut le faire au sein de cmd.exe, pas brut de fonderie comme tu le fais.
Va voir ce post: http://www.developpez.net/forums/sho...d.php?t=133885
, j'y ai mis un peu de code qui permet de récupérer les messages d'erreur en prime, comme ça tu sauras ce qui plante.
Au passage, pour supprimer un fichier, il existe une commande dans l'API Java, pas la peine de lancer un programme externe pour ça...
ouais y a des méthodes dans a classe File pour supprimer des fichiers, mais ça fonctionne pas tjrs, aussi bien deleteOnExit() que delete...
Sinon y a pas moyen d'entrer de simples commandes Dos comme del, print, copy,... ?
Posséder un outil d'impression me serait vachement utile...
Mais si y a moyen de se passer des commandes dos pour ça, je suis tout ouï...
Ouarf... va falloir le dire aux gars de chez Sun que leurs méthodes ne marchent "pas toujours"!!!Envoyé par Razgriz
Je viens de m'apercevoir que tous comptes faits, et malgré ce que j'ai dit, ça marche très bien de les appeler directement... (enfin, chez moi...)Envoyé par Razgriz
Prends le script que j'ai mis dans l'autre post (celui dont je t'ai donné le lien), remplace éventuellement le "getErrorStream" par un "getInputStream", et regarde l'erreur que tu obtiens.
ouais ben ça marche pas ..... Beuheuheuuuu,
enfin soit, on va pas pleure non plus lol
Voici un copier coller du code :
Et voilà le message d'erreur. Le fichier tmp.txt se trouve bien dans le répertoire : N:/Java/Autre/Tests/Cmd Dos/tmp.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class Essai { public static void main(String[] args) { String exe="del N:/Java/Autre/Tests/Cmd Dos/tmp.txt"; try { Process proc=Runtime.getRuntime().exec(exe); InputStream stdout=proc.getErrorStream(); InputStreamReader isr = new InputStreamReader(stdout); BufferedReader br = new BufferedReader(isr); int exitVal = proc.waitFor(); System.out.println("Valeur de sortie: " + exitVal); String line=null; while ( (line = br.readLine()) != null) System.out.println(" >" + line); } catch (Exception e) { e.printStackTrace(); } } }
Alors qu'est-ce qui ne va pas???
J'ai essayé sans le path, avec juste le path qu'il faut au lancement de la console (elle démarre dans N:/Java, je mets donc Autre/... ), mais ça marche pas non plus... Heeeelp..............
N:\Java\Autre\Tests\Cmd Dos>java Essai
java.io.IOException: CreateProcess: del N:/Java/Autre/Tests/Cmd Dos/tmp.txt error=2
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Essai.main(Essai.java:16)
Desfois ça marche, desfois non...
Cette fois, c'était ça qu'il fallait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part String exe="cmd.exe /C del N:\\Java\\Autre\\Tests\\Cmd Dos\\tmp.txt";
(à l'avenir, si je dis un truc, puis un second en disant que le premier n'est pas bon, et que finalement le second ne marche pas, il faut aller essayer le premier... )
ahum, je suis au regret d'annoncer que ça ne foncuionne pas, quand j'essaie avec ladite commande lol, il me mets : valeur de sortie : 1, le fichier spécifié est introuvable, or il se trouve bel et bien au bon endraoit, sous le nom correct...
grrr
Salut,
Tu n'as pas de quote autour du nom du fichier, or celui-ci contient un espace...
Mais pourquoi faire aussi compliqué pour supprimer un fichier ???? Pourquoi ne pas utiliser la méthode delete() de la classe File ????
a++
Mea culpa... j'avais fait les tests avec mon fichier à moi, sans espace... j'aurais dû tiquer en faisant le copier/coller...Envoyé par adiGuba
Partager