Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di pos88
    Registrato dal
    Oct 2011
    Messaggi
    13

    [JAVA] Eseguire .exe da prompt windows

    Salve a tutti,

    ho un problema che mi sta facendo dannare da diversi giorni :
    devo lanciare da prompt dei comandi un eseguibile (pgsql2shp.exe per esportare tabelle di PostgreSQL in ShapeFile) da una classe java. A questo eseguibile devo, inoltre, passare degli argomenti.
    In sostanza devo creare una funzione in grado di fare queste tre operazioni:

    1- aprire il prompt (non necessariamente deve essere visibile)
    2- cambiare directory: cd C:\Program Files\PostgreSQL\9.0\bin
    3- avviare l'eseguibile: pgsql2shp.exe -f destinationPath -h "localhost" -p "5432" -u "postgres" -g "the geom" "database" "tabella"

    Grazie mille in anticipo!!

  2. #2
    Ciao se ho capito bene non è difficile il tuo problema ... Dimmi se ti basta questo codice per capire oppure devo spiegartelo o scriverne altro...

    codice:
    import java.io.*;
     
    public class Main {
     
           public static void main(String args[]) {
     
                try {
                    Runtime rt = Runtime.getRuntime();
                    //Process pr = rt.exec("cmd /c dir");
                    Process pr = rt.exec("c:\\helloworld.exe");
     
                    BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
     
                    String line=null;
     
                    while((line=input.readLine()) != null) {
                        System.out.println(line);
                    }
     
                    int exitVal = pr.waitFor();
                    System.out.println("Exited with error code "+exitVal);
     
                } catch(Exception e) {
                    System.out.println(e.toString());
                    e.printStackTrace();
                }
            }
    }
    Dai ti aiuto un pò di più:


    codice:
    process = Runtime.getRuntime().exec("cmd.exe /C qui l'eseguibile.exe e qui argomenti");
    ES:
    codice:
    process = Runtime.getRuntime().exec("cmd.exe /C mytest.exe Prova.txt");
    I JAVA & LINUX

  3. #3
    Utente di HTML.it L'avatar di pos88
    Registrato dal
    Oct 2011
    Messaggi
    13
    Ciao grazie per la velocità della risposta. Ti scrivo il tuo codice modificato:

    codice:
    try {
                String command="C:\\Program Files\\PostgreSQL\\9.0\\bin\\pgsql2shp.exe";
                String arg="-f \"C:\\Users\\Proprietario\\Desktop\\giunzione\" -h \"localhost\" -p \"5432\" -u \"postgres\" -g \"the geom\"  \"comuneFi\" \"GIA_GIUNZIONE\"";
                Runtime rt = Runtime.getRuntime();
                Process pr = rt.exec("cmd.exe /C "+command+" "+arg);
     
                BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
     
                String line=null;
     
                while((line=input.readLine()) != null) {
                      System.out.println(line);
                }
     
                int exitVal = pr.waitFor();
                System.out.println("Exited with error code "+exitVal);
     
                } catch(Exception e) {
                    System.out.println(e.toString());
                    e.printStackTrace();
                }
    Purtroppo non funziona. Ho provato a immettere nel prompt il comando che gli passiamo noi:
    codice:
    C:\Program Files\PostgreSQL\9.0\bin\pgsql2shp.exe -f "C:\Users\Proprietario\Desktop\giunzione" -h "localhost" -p "5432" -u "postgres" -g "the geom"  "comuneFi" "GIA_GIUNZIONE"
    e non funziona. Bisogna necessariamente fare il cambio di directory e poi lanciare l'eseguibile con gli argomenti.
    p.s. il codice di uscita è 1.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    La documentazione della classe Runtime dovrebbe già darti tutte le risposte che cerchi.

    In particolare, dovrai usare il metodo che si compone di 3 parametri (uno dei due). Ad esempio questo:

    codice:
    exec(String command, String[] envp, File dir)
    Dove i parametri sono:

    command - Il comando da eseguire
    envp - Un array di parametri da passare al comando
    dir - Un oggetto File che rappresenta la "working directory" da cui avviare il programma


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di pos88
    Registrato dal
    Oct 2011
    Messaggi
    13
    Grazie mille LeleFT funziona alla grande!!!
    Ho fatto così:
    codice:
        File path=new File("C:\\Program Files\\PostgreSQL\\9.0\\bin");
        String arg="-f \"C:\\Users\\Proprietario\\Desktop\\strad\" -h \"localhost\" -p \"5432\" -u \"postgres\"   \"comuneFi\" \"public.GIA_EL_STRADALE\"";
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec("cmd.exe /C pgsql2shp.exe "+ arg, null, path);

    Ora mi piacerebbe che, tramite un jframe, il percorso che c'è all'interno di arg possa essere scelto dall'utente. Credo che in questo caso si debba usare un jTree ma non so da che parte comnciare..potete aiutarmi??

    Grazie mille in anticipo!!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da pos88
    Ora mi piacerebbe che, tramite un jframe, il percorso che c'è all'interno di arg possa essere scelto dall'utente. Credo che in questo caso si debba usare un jTree ma non so da che parte comnciare..potete aiutarmi??
    È sufficiente usare JFileChooser, che tra l'altro può essere usato sia in una dialog a sé stante, sia come "componente" all'interno di un layout come qualunque altro componente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Problematica diversa, discussione diversa.

    Prima di aprire una nuova discussione, fai una ricerca, guardati la documentazione di JFileChooser ed il relativo tutorial How to use File Choosers. Non reinventare la ruota.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di pos88
    Registrato dal
    Oct 2011
    Messaggi
    13
    Scusate ma non sono molto pratico di forum. Cmq quello che intendevo io è scegliere il percorso dove deve essere salvato il file che l'eseguibile mi dà in output mentre con il jFileChooser è possibile andare a ricercare un file per aprirlo.
    Ad ogni modo aprirò un'altra discussione. Grazie mille!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.