"ouvrir avec" en java

Fermé
VBS - 19 févr. 2018 à 15:16
 VBS - 7 avril 2018 à 15:13
Bonjour à tous,

J'aimerais savoir s'il est possible de faire un "ouvrir avec" en JAVA comme cette commande batch

@echo off
tcc.exe machin.btm

J'aimerais que la fenêtre s'ouvre lorsque le code java s'exécute.

Est-ce possible SVP ?



A voir également:

4 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
19 févr. 2018 à 15:42
Bonjour,

Tu peux utiliser Runtime.exec
https://docs.oracle.com/javase/9/docs/api/java/lang/Runtime.html#exec-java.lang.String:A-

Exemple :
Process p = Runtime.getRuntime().exec(new String[] { "tcc.exe", "machin.btm" });
0
Bonjour,

Je reviens vers vous car je voulais juste savoir si il était possible d'utiliser CmdArray sur Windows 10 S (version bridé qui interdit l'exécution de cmd.exe)

Merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 avril 2018 à 21:35
Bonjour,

Le seul moyen de le savoir c'est d'essayer...
0
Bonsoir,

Le seul problème c'est que je n'ai pas Windows 10 S ce qui m'empêche de tester cela.
0
Bonsoir,

Est-ce normal que lorsque cette commande java s'exécute en arrière plan :

Process p = Runtime.getRuntime().exec(new String[] { "tcc.exe", "machin.btm" });


Moi, ce que je cherche, c'est d'ouvrir une fenêtre TCC avec le script.

Sauriez-vous comment je pourrais faire cela s'il vous plaît ?

Merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 avril 2018 à 22:36
Bonsoir,

Il faudrait regarder la documentation de ton programme (que je ne connais pas), il y a sûrement des options qui permettent de faire ce que tu veux, dans tous les cas cela fonctionnera de la même manière avec exec() que si tu le fais avec cmd.exe

Remarque : tout ce que l'invite de commande affiche d'habitude peut également être lu via l'objet Process que tu récupères, cela peut être utile si la commande que tu as saisi a provoqué une erreur.
Exemple : https://forums.commentcamarche.net/forum/affich-33667294-processbuilder-ne-fonctionne-pas-a-partir-d-un-serveur-weeb#1
0
Bonsoir,

Il n'y a pas vraiment de Doc Pour faire ce que je veux avec TCC


Tous ce qui est permis c'est "TCC.exe fichier.btm"

On peut à la limite mettre start devant...

Mais en java en utilisant runtime exec, je ne vois pas comment faire avec des arguments...

Serait il possible que vous me montriez un exemple s'il vous plaît ?

Merci d'avance pour votre aide
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > VBS
5 avril 2018 à 23:30
"je ne vois pas comment faire avec des arguments"
Exactement comme tu l'as fait, avec un tableau
exec(new String[] { "tcc.exe", "machin.btm" });


"Serait il possible que vous me montriez un exemple s'il vous plaît ?"
Par exemple un
ping localhost
en reprenant le code du lien de tout à l'heure.

import java.io.InputStream;
import java.util.Scanner;
import java.util.function.Consumer;

public class Test {
    public static void main(String[] args) throws Exception {
        Process process = Runtime.getRuntime().exec(new String[] { "ping", "localhost" });
        Thread out = consume(process.getInputStream(), line -> System.out.println("STDOUT: " + line));
        Thread err = consume(process.getErrorStream(), line -> System.err.println("STDERR: " + line));
        int exitValue = process.waitFor();
        out.join();
        err.join();
        System.out.println("RESULT: " + exitValue);
    }

    private static Thread consume(InputStream in, Consumer<String> out) {
        Thread t = new Thread(() -> {
            try (Scanner sc = new Scanner(in, "Cp850")) {
                while (sc.hasNextLine())
                    out.accept(sc.nextLine());
            }
        });
        t.setDaemon(true);
        t.start();
        return t;
    }
}
0
Bonjour,

J'ai oublié de dire que je devais mettre ce code dans un jbutton.

Donc, si j'ai bien compris, je dois faire cela dans mon code :


Process process = Runtime.getRuntime().exec(new String[] { "ping", "localhost" });


C'est à dire, ce que j'utilise en ce moment ?

Merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
6 avril 2018 à 08:40
Bonjour,

Ne sautes pas trop vite les étapes. Tu avais déjà deux problèmes :
  • L'exécution en arrière plan
  • Windows 10 S

Commence par voir si avec un main simple ça fonctionne, pour régler les problèmes un par un, puis après tu intégrera ce code à ton interface graphique.
Cela pourra engendrer de nouveaux problèmes, mais au moins tu auras validé le fonctionnement de base de la commande.
0
Bonjour,


Je vais essayer de mettre cette commande :

start TCC.exe fichier.btm


Et je vérifierai que ce dernier ne m'execute pas cmd.exe conformément au restrictions imposées par Windows 10 S.

Si cela fonctionne, c'est gagné !

Je test cela reviens vers vous dès que possible.

Merci
0
Bonjour,

J'ai essayé de lancer ce code :

try {
                Process process = Runtime.getRuntime().exec(new String[] {"start","tcc.exe","fichier.btm"});
        } catch (IOException ex) {
            Logger.getLogger(Information.class.getName()).log(Level.SEVERE, null, ex);
               Desktop desktop = null;
      if (Desktop.isDesktopSupported()) {
        desktop = Desktop.getDesktop();
      } 


Cependant, j'obtiens cette erreur :

avr. 07, 2018 1:19:42 PM Information jButton4ActionPerformed
GRAVE: null
java.io.IOException: Cannot run program "start": CreateProcess error=2, Le fichier spécifié est introuvable


Comment pourrais-je remédier à cela s'il vous plaît ?

Est-ce que je m'y prends mal s'il vous plaît ?

Dois-je créér une autre classe et mettre le code que vous m'avez communiqué ?

Merci
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > VBS
7 avril 2018 à 14:17
Pourquoi utiliser start ? Dans mon exemple j'ai fait un
ping localhost
, pas un
start ping localhost
...
Si c'est la commande
tcc.exe fichier.btm
que tu veux lancer alors il faut faire
tcc.exe fichier.btm
pas
start tcc.exe fichier.btm
, le start ne sert à rien, ce n'est pas un programme.
0
Bonjour,

J'ai réussi à lancer la fenêtre en question !


"Pourquoi utiliser start ?"

Voilà le soucis :

Lorsque qu'on lance la commande
TCC.exe fichier.btm
on obtient le contenu sur la console cmd.exe or, nous voulions lancer la fenêtre de l'exécutable (mais pas sur la console cmd).

Aussi, lorsque l'on lance
tcc.exe fichier.btm
du java, ce dernier s'exécute en arrière plan étant donné que l'on clique sur un jbutton et qu'aucun zone de texte n'a été prévu, d'où l'utilisation de la commande
start
qui lance le client avec l'argument.

Or
start
n'est pas reconnu pas java étant donné que ce dernier n'est pas un fichier exécutable apparaissant dans l'arborescence du projet mais une simple commande Dos.

Pour régler ce soucis il m'a suffit d'appeler un fichier test de la façon suivante :

tcc.exe fichier.btm


Vu que ce dernier s'exécute en arrière plan,

J'y ai mis la commande :
start tcc.exe fichier.btm


Ce qui me permet de lancer mon exécutable et son argument.

Merci encore pour votre aide !
0