Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64

    [JAVA] RunTime.getRunTime()...

    Ciao a tutti...ho realizzato un programma in java che manda in esecuzione un .exe (scritto in c++)...l'idea è quello di ospitarlo in una finestra in java...fino qui tutto bene...ho utilizzato il seguente codice...

    codice:
                    String prog_exe = new String("C:\\prova.exe");
                    Runtime r = Runtime.getRuntime();
                    Process process = r.exec (prog_exe);
                    
                    InputStream stdout = process.getInputStream ();
                    InputStreamReader inputstreamreader = new InputStreamReader(stdout);
                    BufferedReader brCleanUp = new BufferedReader (inputstreamreader);
                    
                    while ((line = brCleanUp.readLine ()) != null) {
                        System.out.println ("[Stdout] " + line);
                     }
    in output mi viene visualizzato l'elaborazione del programma prova.exe...

    Il problema è questo per come è strutturato il programma di prova (per altro molto semplice) vorrei che mi venisse visualizzato l'elaborazione mano a mano che questa viene eseguita e che stampa a video...mi spiego meglio prova.exe è organizzato nel seguente modo...

    stampa a video
    sleep(2);
    stampa a video
    speep(2);
    stampa a video

    le operazioni di stampa a video sono intervallate da un tempo di attesa...quando vado a richiamare il mio programma all'interno della classe in java questo aspetta la fine dell'elaborazione e poi stampa tutto...io vorrei che mano a mano che queste stampe venissero eseguite fossero poi stampate anche dal programma in java che è collegato allo stdout di quello .exe

    Spero di essermi spiegato...faccio notare che sto lavorando in windows ma che provando ad eseguire un file sh in Linux, che fa le stesse cose del mio in c++, alla classe in java non riscontro questi problemi, anzi l'esecuzione delle istruzioni viene mantenuto e trascritta con gli stessi intervalli che ho specificato...mano a mano che vengono eseguite le stampe a video dal file.sh

    Spero di essere stato chiaro...se qualcuno ha qualche consiglio...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] RunTime.getRunTime()...

    Originariamente inviato da Tone_A
    le operazioni di stampa a video sono intervallate da un tempo di attesa...quando vado a richiamare il mio programma all'interno della classe in java questo aspetta la fine dell'elaborazione e poi stampa tutto...
    Il problema non è nel programma java ... ma nel tuo programma in C++. L'output è "bufferizzato", quindi quando fai dell'output e poi una sleep, non necessariamente viene subito scritto fisicamente in output.

    Semplicemente nel tuo programma c++ fai un "flush" dello standard output prima della sleep e tutto funzionerà come vuoi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64
    Grazie si era proprio per quello ho aggiunto a tutte le stampe a video del prog in C++ un <<endl alla fine che esegue il flush e funziona correttamente...ora però ho un altro problema...

    Devo visualizzare il contenuto dell'elaborazione del prog in C++ in una JTextArea...

    codice:
                    while ((line = brCleanUp.readLine ()) != null) {
                        System.out.println ("[Stdout] " + line);
                        jTextArea1.append(line+"\n");
                        
                     }
    utlizzando un append il problema rimane....mi visualizza tutto solo alla fine dell elaborazione del prog in C++...come posso fare...??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Tone_A
    codice:
                    while ((line = brCleanUp.readLine ()) != null) {
                        System.out.println ("[Stdout] " + line);
                        jTextArea1.append(line+"\n");
                        
                     }
    mi visualizza tutto solo alla fine dell elaborazione
    Questo pezzo di codice quando viene eseguito??? Forse in risposta alla pressione di un pulsante? O altro? Quindi sei dentro il metodo di un listener?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    64
    Si viene generato alla pressione di un tasto ho risolto lanciando un thred che gestisce questa operazione così funziona tutto...grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Tone_A
    Si viene generato alla pressione di un tasto ho risolto lanciando un thred
    Appunto .... stavi impegnando il EDT (event dispatch thread) e quindi la tua interfaccia era "congelata".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.