Signaler

Utiliser chemin relatif [Résolu]

Posez votre question ff - Dernière réponse le 17 sept. 2017 à 13:04 par ff
Salut a tous ,
voila mon PB,
j'utilise un chemin absolue pour appeler un exe en cliquant sur un jbutton cependant, j'aimerais pouvoir l’appeler avec un chemin relatif
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler "+"D:\\Program Files\\mon fichier\\mon fichier.exe");


pour pouvoir lancer l'exe quelque soit le disque sur lequel il est enregistrer ( C ou D)

car lors d'une installation , on ne sait pas ou le programme va s'installer par défaut et un chemin absolue ne fonctionnera donc pas

mais je ne trouve aucune solution qui fonctionne réellement sur d'autres forums

Merci d'avance pour votre aide
Utile
+0
plus moins
Bonjour,

Pour récupérer le chemin de ton appli java, tu dois pouvoir utiliser une fonction du genre getAbsolutePath() ou getCanonicalPath()

Par exemple :
File directory = new File (".");
System.out.println ("Current directory's canonical path: " +     directory.getCanonicalPath());
System.out.println ("Current directory's absolute  path: " + directory.getAbsolutePath());

ff- 9 sept. 2017 à 17:23
Salut et merci de m'avoir répondu
je dois donc mettre mon chemin d’accès dedans seulement:

File directory = new File ("./ Program Files/mon fichier/fichier .exe");

car cela ne marche pas

sinon j'ai trouver aussi cela mais il ne marche pas non plus :

String path=new File(".Program Files/mon fichier/fichier .exe").getAbsolutePath()


merci
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

Java travaille en relatif avec l'ensemble des dossiers de son classpath.

Tu peux afficher le classpath courant de ton programme avec :
System.out.println(System.getProperty("java.class.path"));

Quand tu travailles en relatif, tous les dossiers listés dans le classpath seront considérés, dans l'ordre, comme parents possibles pour essayer de trouver le fichier recherché. Le premier fichier qui correspond est utilisé.

On peut modifier le classpath d'un programme au démarrage avec
-cp

java -cp .;C:\toto;D:\tata ClasseContenantLaMethodeMain
ff- 14 sept. 2017 à 08:42
Bonjour,
Cela veut dire que mes fichiers doit juste être dans le même dossier que le programme java oo pas ?

Merci
Répondre
KX 14979Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 9 novembre 2017 Dernière intervention - 14 sept. 2017 à 11:52
Si c'est à la racine oui, ce dossier est forcément dans le classpath sinon il ne pourrait pas démarrer le programme.
Mais si c'est un sous-répertoire, ou un répertoire ailleurs, il faut l'ajouter explicitement au classpath.
Répondre
ff- 14 sept. 2017 à 13:49
j'ais oublier (ou plutôt pas compris ) qu'il fallait mettre les fichier dans le classpath (ca règle pas mal de problème)

maintenant, je vais voir si cela fonctionne.

merci
Répondre
ff- 14 sept. 2017 à 15:11
reBonjour

serait-il possible vous me montriez un exemple type d'une fonction classpath que je pourrait mettre sur un jbutton car je rencontre des difficultés


Aussi(et c'est ma faute), j'ai sans doute oublier de vous dire que l'exe que je cherche à appeler est à l’extérieur du jar et qu'il est donc pas possible de le mettre dans le classpath car il est dans un autre dossier

merci
Répondre
ff- 14 sept. 2017 à 16:41
j’utilise cela mais ca ne fonctionne pas
pourriez vous m'aider svp?



Merci

Properties config;
config = new Properties();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("fichier.exe"));
} catch (FileNotFoundException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
try {
config.load(br);
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
try {
br.close();
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
Répondre
Donnez votre avis
Utile
+0
plus moins
Prenons un exemple.

Pour simplifier j'exécute un fichier .bat au lieu d'un .exe mais ça ne change rien à la logique de résolution du fichier en chemin relatif.

Voici le code du programme Java :
public class Test {
    public static void main(String[] args) throws Exception {
        Process process = Runtime.getRuntime().exec("test.bat");
        System.out.println("exitValue = " + process.waitFor());
    }
}

Et le code du programme test.bat :
exit 42

Après compilation, je mets le fichier Test.class et le fichier test.bat dans le même dossier, par exemple C:\test et je lance la commande
java Test


Le programme Java exécute le .bat récupère son résultat et l'affiche :
exitValue = 42
ff- 14 sept. 2017 à 18:59
Et je met cela ou Par rapport a mon jbutton?
je doit créé une classe test et puis je peut faire tout cela?
que dois-je faire(mettre dedans (private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) ?)
par rapport a mon jbutton ?
merci

exemple:
  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
????????????????
}


Merci encore
Répondre
KX 14979Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 9 novembre 2017 Dernière intervention - 14 sept. 2017 à 19:04
Je ne connais rien du reste de ton code, mais j'imagine que tu dois avoir quelque part une méthode main(), ça n'a aucune importance si ta classe ne s'appelle pas Test, et ça n'a aucune importance non plus que tu lances l'action depuis un JButton ou autre chose...
Répondre
ff- 15 sept. 2017 à 10:08
bonjour,

public static void main(String[] args) throws Exception {

quand je met cela dans mon code, cela m'affiche point exclamation rouge sur le coté

dois-je mettre tout le code dans le jibutton ?

sinon je peut vous mettre mon script pour que vous puissiez jeter un coup d’œil
merci
Répondre
KX 14979Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 9 novembre 2017 Dernière intervention - 15 sept. 2017 à 13:04
Pourquoi tu veux remettre mon main dans ton code ? Ton code contient déjà un main vu que tu as déjà une application qui fonctionne.

La seule chose à faire c'est copier-coller mes deux lignes de code à l'endroit où tu veux, par exemple dans ton ActionPerformed. Mais surtout placer ton .exe au bon endroit parce que c'était ça le problème il me semble...

Là si on repart à t'expliquer comment faire un main, on va pas s'en sortir...
Répondre
Donnez votre avis
Utile
+0
plus moins
Bonjour,

           
throw new IOException(
"Cannot run program \"" + prog + "\""
+ (dir == null ? "" : " (in directory \"" + dir + "\")")
+ exceptionInfo,
cause);
}
}


Que puis-je faire avec cette fonction svp ( que fait-elle )?

merci
ff- 16 sept. 2017 à 16:09
Et donc je mets tout cela dans mon jbutton ?
import java.io.File;
public class PathTesting {
public static void main(String [] args) {
File f = new File("test/.././file.txt");
System.out.println(f.getPath());
System.out.println(f.getAbsolutePath());
try {
System.out.println(f.getCanonicalPath());
}
catch(Exception e) {}
}
}


ou cela ?:


mport java.io.File;


 File f = new File("test/.././file.txt");
System.out.println(f.getPath());
System.out.println(f.getAbsolutePath());
try {
System.out.println(f.getCanonicalPath());
}
catch(Exception e) {}

Ou puis-je utiliser cela (cela fonctionne?) :

    
throw new IOException(
"Cannot run program \"" + prog + "\""
+ (dir == null ? "" : " (in directory \"" + dir + "\")")
+ exceptionInfo,
cause);
}
}


encore merci pour votre aide
Répondre
ff- 16 sept. 2017 à 18:26
 File f = new File("fichier.exe");
System.out.println(f.getPath());
System.out.println(f.getAbsolutePath());
try {
System.out.println(f.getCanonicalPath());
}
catch(Exception e) {}



reBonjour, cela m'indique bien un chemin mais n'execute pas

mon programme,par ailleurs , ce dernier m'indique un chemin different de celui ou ce trouve le fichier :

D:\Users\admin\Documents\NetBeansProjectsMBF\JavaApplication7\fichier.exe

Au lieu de :

C:\ mon fichier\mon fichier.exe

maintenant ,j'aimerais qu'il puisse s’exécuter , comment pourrais-je faire pour que quand je click sur le bouton , le programme s'execute SVP ?


que dois-je faire SVP ?

Merci
Répondre
ff- 16 sept. 2017 à 19:30
Aussi ,pourriez vous me monter un exemple sil vous plait ?

Merci d'avance pour votre aide
Répondre
KX 14979Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 9 novembre 2017 Dernière intervention - 16 sept. 2017 à 19:37
Tu as un exemple ici :

http://www.commentcamarche.net/forum/affich-34855051#15
Répondre
ff- 17 sept. 2017 à 13:04
Bonjour,


Oh! Merci , cela fonctionne , j'ai cru que je n'y arriverais jamais

 try {
process = Runtime.getRuntime().exec("fichier.exe");
} catch (IOException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}
try {
System.out.println("exitValue = " + process.waitFor());



// TODO add your handling code here:
} catch (InterruptedException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
}




Ce problème est donc résolu .

Encore merci KX et les autres forumeurs !
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !