Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21
  1. #11
    Con quel codice il programma Java ti si chiude oppure rimane in attesa?

    Secondo me rimane solo in attesa, intanto perchè br.readLine() aspetta un "\n" per restituirti l'output cosa che tu non scrivi mai dall'exe, poi perchè lanci un getch() che aspetta un input nello stdin di C (Process.getOutputStream()) e quando fai waitFor() aspetta all'infinito un input nello stdin del processo e quindi rimane bloccato.

    Devi gestire questa situazione.
    lolide
    Java Programmer

    Informati

  2. #12
    resta in attesa.
    Ho messo il \n, e tolto il getchar(che mi serviva per evitare che la finestra si chiudesse all'istante).
    Tutto resta uguale.

    Mi potreste spiegare perche il comportamento è funzionante con iexplore?

  3. #13
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    questo a dire il vero io non lo so, ma probabilmente funziona perché iexplorer non redireziona sullo stdout e stderr, cmq leggi quel link che ti ho passato, è indicato come è opportuno gestire questa situazione
    RTFM Read That F*** Manual!!!

  4. #14
    import java.io.*;

    public class Mio{

    public static void main(String[] args){

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


    try{
    ProcessBuilder pb=new ProcessBuilder(ff);
    pb.redirectErrorStream(true);

    Process p=pb.start();
    InputStream is=p.getInputStream();
    InputStreamReader isr=new InputStreamReader(is);
    BufferedReader br=new BufferedReader(isr);
    System.out.println(1); //stampato
    String linea;
    if ((linea=br.readLine()) !=null)System.out.println(linea);
    else System.out.println("nulla da leggere");



    br.close();
    isr.close();
    is.close();
    p.waitFor();


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

    Ho chiuso gli stream, ma niente da fare, rimane sempre in attesa.
    Sto impazzendo.
    Redirect non cambia niente in output ne nel funzionamento.

  5. #15
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa usa i tag code per il codice!!!

    prova a mettere nel tuo programma una new line (\n)
    RTFM Read That F*** Manual!!!

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    guarda sei fortunato, revisionando del codice ho trovato un esempio (mi pare simile a quello su stackoverflow)
    Codice PHP:
                            Process process Runtime.getRuntime().exec(cmdarray);
                
    process.waitFor(); 

                
    String line;

                
    BufferedReader input = new BufferedReader(new InputStreamReader(
                        
    process.getInputStream()));
                while ((
    line input.readLine()) != null) {
                    
    System.out.println(line); 
                } 
    RTFM Read That F*** Manual!!!

  7. #17
    Niente, tutto morto.
    Si ferma alla stampa di 1 e poi nient'altro.

    Voi non avete mai fatto nulla del genere? Anche un esempio mi potrebbe aiutare forse.

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quello che vedi sopra è codice funzionante, quindi posta il contenuto di prova (suppongo sia un .c)
    RTFM Read That F*** Manual!!!

  9. #19
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    Se il tuo programma stampa una stringa a terminale, evidentemente ti serve il terminale... Devi invocarlo e nel "suo ambito" lanci l'eseguibile con la sintassi adeguata:

    codice:
    try {
    
      String[] cmdarray = {"cmd.exe", "/c", "start", "C:\\Users\\Giuseppe\\Desktop\\prova.exe"};
    
      Runtime.getRuntime().exec(cmdarray); 
    
    catch (IOException exc) {
    
      System.out.println(exc);
    
    }
    I vari explorer.exe, calc.exe, mspaint.exe... partono senza ulteriori parametri perché non hanno bisogno di cmd.exe

  10. #20
    Ho fatto un test (purtroppo solo su linux ho potuto) e funziona

    main.c (compilato con "gcc -o prova main.c")
    codice:
    #include <stdio.h>
    
    int main () {
    printf ("Prova\n");
    }
    Prova.java (avviato con "java Prova")
    codice:
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    
    public class Prova {
    
        public static void main (String[] arg) throws Exception {
            ProcessBuilder pb = new ProcessBuilder("./prova");
            Process p = pb.start();
            if (p == null)
                throw new Exception("Process non inizializzato");
            InputStream pis = p.getInputStream();
            try (BufferedReader pbis = new BufferedReader(new InputStreamReader(pis$
                String l;
                while ((l = pbis.readLine()) != null) {
                    System.out.println(l);
                }
            pis = p.getErrorStream();
            try (BufferedReader pbis = new BufferedReader(new InputStreamReader(pis$
                String l;
                while ((l = pbis.readLine()) != null) {
                    System.out.println("ERR: " + l);
                }
            }
            p.waitFor();
        }
    }
    Ovviamente l'eseguibile deve trovarsi in una cartella corretta (nella stessa base con la quale viene avviata la classe java oppure in una cartella presente nella variabile d'ambiente PATH)

    Output console
    codice:
    root@nome:~/prova# java Prova
    Prova
    root@nome:~/prova#
    lolide
    Java Programmer

    Informati

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 © 2026 vBulletin Solutions, Inc. All rights reserved.