Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Java - Runtime.getRuntime().exec

    Salve a tutti. Devo aprire un eseguibile da codice java. Uso la piattaforma NetBeans e ho letto su internet che il metodo migliore per realizzare questo progetto è "Runtime.getRuntime().exec" però non funziona e non capisco perchè. Qualcuno può spiegarmi la sintassi da scrivere per descrivere il percorso dell'eseguibile? Grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315

    Moderazione

    Provato con una ricerca su questo forum?
    Si è parlato di questo argomento non molti mesi fa.

    Ad ogni modo, la Documentazione di Runtime ti spiega tutto quello che c'è da sapere sul metodo exec() (che è provvisto, oltretutto, di 5 versioni in overload).

    Il metodo con un solo argomento String si aspetta il percorso completo all'eseguibile da avviare.

    PS: quando dici "non funziona" non stai dando alcuna informazione... ciò che non funziona è il tuo codice, ma se non lo mostri nessuno potrà mai darti alcun suggerimento. Oltretutto, se non posti i messaggi di errore che eventualmente ottieni, è ancora più difficile dirti cosa c'è che non va.


    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

  3. #3
    Si scusa hai ragione ma tanto ho già risolto per conto mio questo problema. Però avrei un dubbio ancora.. sarebbe possibile prelevare una stringa da quel programma esterno? Mi spiego meglio.. Io ho fatto partire un eseguibile che legge un pdf e da esso interpreta i vari codici a barre che trova.. A me servirebbe il risultato della sua interpretazione. Sarebbe possibile salvarla in una stringa?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Originariamente inviato da ChrisArru
    Si scusa hai ragione ma tanto ho già risolto per conto mio questo problema. Però avrei un dubbio ancora.. sarebbe possibile prelevare una stringa da quel programma esterno? Mi spiego meglio.. Io ho fatto partire un eseguibile che legge un pdf e da esso interpreta i vari codici a barre che trova.. A me servirebbe il risultato della sua interpretazione. Sarebbe possibile salvarla in una stringa?
    Se il programma butta sullo standard output le informazioni relative all'elaborazione, ovviamente sì. La chiamata al metodo "exec()" di Runtime restituisce un oggetto Process. Da tale oggetto è possibile ricavare un InputStream per leggere l'output del programma chiamato (e anche un OutputStream per poter eventualmente scrivere sul suo standard input).

    In questa discussione avevo anche fatto un esempio concreto di lettura dell'output di un processo lanciato con exec().

    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
    Grazie mille, è esattamente ciò di cui avevo bisogno. Il problema ora è che non legge niente dal programma esterno. La variabile che uso per salvarmi la prima riga è sempre vuota, anche se nel programma non ci sono righe vuote. Sai come mai? Il programma che ho scritto io è il seguente :

    codice:
    import java.io.*;
     import java.util.*;
     import java.io.IOException;
     public class richiamoprogramma {
          public static void main(String[] args) throws IOException, FileNotFoundException {
                  int i=0;
             File f = new File ("C:\\Users\\studenti\\Desktop\\");
             String[] files = f.list();
              i=0;
             String nomeFile=files[i];
             Process p= Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " +   "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\ZBar Bar Code Reader\\ZBar Command Prompt.lnk");
             InputStream is = p.getInputStream();
             BufferedReader buff = new BufferedReader( new InputStreamReader(is) );
    
             String linea = null;
             linea=buff.readLine();
             System.out.println( linea );

  6. #6
    E se provo a inserire "new String[]" prima del percorso del file mi dà il seguente errore:

    Exception in thread "main" java.io.IOException: Cannot run program "rundll32 SHELL32.DLL,ShellExec_RunDLL C:\ProgramData\Microsoft\Windows\Start Menu\Programs\ZBar Bar Code Reader\ZBar Command Prompt.lnk": CreateProcess error=2, Impossibile trovare il file specificato
    at java.lang.ProcessBuilder.start(ProcessBuilder.java :1029)
    at java.lang.Runtime.exec(Runtime.java:615)
    at java.lang.Runtime.exec(Runtime.java:483)
    at richiamoprogramma.main(richiamoprogramma.java:27)
    Caused by: java.io.IOException: CreateProcess error=2, Impossibile trovare il file specificato
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(ProcessImpl.java:188)
    at java.lang.ProcessImpl.start(ProcessImpl.java:132)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java :1021)
    ... 3 more

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.