Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    ProcessBuilder ed applicazione.exe

    Ciao a tutti, sono nuovo del forum e non molto esperto di java.
    Sono alle prese con un problema che non riesco a risolvere.
    Voglio lanciare un'applicazione.exe usando la classe processbuilder di java. Ecco l'esempio:

    import java.io.*;

    public class Mio{

    public static void main(String[] args){

    String ff="prova.exe";

    ProcessBuilder pb=new ProcessBuilder(ff);
    try{
    System.out.println("1");
    //pb.directory(new File("C:\\Users\\Giuseppe\\Desktop"));
    Process p=pb.start();
    if(p!= null) System.out.println(1231);// viene stampato, vuol dire che il processo è vivo?

    System.out.println("2");


    }catch(IOException e){
    e.printStackTrace();
    }
    }
    }

    I system.out.println li ho messi per vedere se arrivava o meno in certi punti e li stampa tutti.
    Però non mi lancia l'applicazione prova.exe, che è un semplicissimo programmino scritto in c, il famoso hello world.

    Ho provato pure a mettere il percorso assoluto C:\\Users\\Giuseppe\\Desktop\\prova.exe, ma niente da fare, l'output è sempre e solo:
    1
    1231
    2

    Vi prego aiutatemi. Grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    C'è una sezione apposita dedicata a Java.
    Sposto la discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    il processo è creato, la stampa verifica questo.
    Farei un redirect dell'output e dell'err sugli standard output ed err di java (un'occhio alle API può aiutarti) e vedere se nel taskmanager hai prova.exe in esecuzione (ma io credo di no)
    RTFM Read That F*** Manual!!!

  4. #4
    Appena io avvio da prompt con java Mio, dopo le stampe, l'esecuzione è terminata.
    Ho comunque controllato tra i task e non c'è prova.exe

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    come immaginavo, tu avvii il processo, ma non aspetti che finisca, concludi subito il tuo main.
    Dovresti aspettare che finisca prima di proseguire, finito il padre in genere muoiono anche i figli (ecco perché non lo vedi)
    Leggi qui
    RTFM Read That F*** Manual!!!

  6. #6
    Ok, ora ci siamo, nel senso che tra i task, prova.exe c'è.

    P.s ho provato a fare una cosa:
    invece di lanciare la mia applicazione prova.exe ho lanciato iexplore.exe, passandogli un sito come secondo parametro di processbuilder.
    In quel caso mi si apre in automatico proprio internet explorer.
    Perche per iexplore funziona e per prova.exe no?

  7. #7
    E poi se fai un output dall'exe non viene visto dalla console di java.
    O aspetti che il processo finisca con waitFor() oppure leggi lo standard out del processo con Process.getInputStream(), cmq l'InputStream del processo si chiudera' quando termina il processo.
    lolide
    Java Programmer

    Informati

  8. #8
    Lolide forse hai ragione, io nel mio helloworld, faccio la printf con questo msg.
    Evidentemente questo msg java non lo legge. Tu intendi dire questo?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    domanda: prova.exe cosa fa?
    Come ti ho detto sopra e come ti ha suggerito lolide redireziona l'output (std e err) del processo a quelli java (guarda le API di processbuilder a proposito) almeno sai qualcosa del processo, se termina subito con errore.

    Puoi anche prendere lo stato di terminazione dello stesso, potrebbe indicarti qualcosa
    RTFM Read That F*** Manual!!!

  10. #10
    Sono queste le modifiche che intendete voi?
    Mi sono preso gli stream del processo.
    Ma ancora nulla

    import java.io.*;

    public class Mio{

    public static void main(String[] args){

    String ff="C:\\Users\\Giuseppe\\Desktop\\prova";

    ProcessBuilder pb=new ProcessBuilder(ff);
    try{

    Process p=pb.start();
    InputStream is=p.getInputStream();
    InputStreamReader isr=new InputStreamReader(is);
    BufferedReader br=new BufferedReader(isr);
    System.out.println(br.readLine());

    p.waitFor();


    }catch(IOException e){
    e.printStackTrace();
    }catch(InterruptedException ee){
    ee.printStackTrace();
    }
    }
    }


    questo è il codice in C
    #include<stdio.h>

    int main(){
    printf("hello world");
    getchar();
    }

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.