Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21
  1. #11
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Dunque....

    L'applicazione principale deve essere una sorta di "bel pacchetto" per un programma che è già stato mandato a una serie di clienti e che, finora, è stato sempre lanciato con un file .cmd

    Quindi il programma chiamato non può essere assolutamente toccato.

    Il chiamante visualizza una GUI che, permette di impostare i parametri del chiamato e poi lo lancia quando si preme un tastino.

    l'output me lo (dovrebbe ) fare su un file immesso come parametri... ma a volte me lo fa sullo standard output

    Insomma, tanto per ribadire il concetto...


  2. #12
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reiuky
    Il chiamante visualizza una GUI che, permette di impostare i parametri del chiamato e poi lo lancia quando si preme un tastino.
    Quando ricevi la notifica della pressione del pulsante, sei nel metodo actionPerformed di un tuo ActionListener. In quel punto si è nel contesto del EDT (event dispatch thread) che non devi mai bloccare per troppo tempo (altrimenti la tua GUI è "congelata"). La exec() è velocissima, non è bloccante (non è quello il problema) ma se vuoi attendere (waitFor()) la terminazione del programma avviato, allora non puoi farlo nel contesto del EDT. Devi creare un thread separato in cui fare la exec e la waitFor. E cosa farai magari dopo la waitFor sono questioni tue.

    Originariamente inviato da Reiuky
    l'output me lo (dovrebbe ) fare su un file immesso come parametri... ma a volte me lo fa sullo standard output
    Se con la exec lanci direttamente la JVM, se c'è dell'output allora lo devi leggere tu tramite l'InputStream fornito da Process. L'output non finirebbe "visivamente" da alcuna parte e se non lo leggi il programma lanciato può anche bloccarsi.

    Altrimenti potresti anche lanciare la applicazione in un altro modo (sempre con exec) ma sfruttando la shell di Windows in modo che usi una "sua" console.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #13
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Infatti, ma non risolve il problema: la classe chiamata resta in attesa che la chiamante venga chiusa prima di essere eseguita, e non è assolutamente quello che mi serve.

    Alla fine posso anche fregarmene di aspettare che l'operazione dia conclusa, ma la devo fare appena premo il tasto suddetto, e non dopo che ho chiuso il programma.

    Ho tentato sia a chiamare direttamente JAVA NOMECLASSE sia a chiamare un file cmd che esegue la suddetta classe. In entrambi i casi il risultato è che la classe chiamata aspetta la chiusura della GUI prima di essere eseguita.

    Adesso ho provato a chiamare direttamente il metodo main della classe suddetta, ma, siccome eclipse non vede la classpath, stò tentando di compilare da linea di comando con la classpath impostata.
    Ora il compilatore mi 'trova' la classe incriminata, ma non trova più un'altra classe creata da me e che uso all'interno del programma, che si trova nello stesso packeage e nella stessa directory.

    Ho iniziato a dare craniate contro il tavolo (visto che il monitor LCD è troppo morbido)

  4. #14
    codice:
    OutputStream os = ps.getOutputStream();
     InputStream is = ps.getInputStream();
    se non ti servono l'output e l'input non istanziarli

    prova solo con
    codice:
    Runtime rt = Runtime.getRuntime();
    Process ps = rt.exec("java NOMECLASSE  args");


    io ho fatto un test in questo modo funziona

    la classe che verra eseguita dall'altra classe
    codice:
    public class Prova {
        public static void  main(String[] arg){
                 System.out.print("ciao");
        }
    }
    e questa quella che lo lancia
    codice:
    public class Test {
    
        
        
        public static void  main(String[] arg) {
            
            Runtime rt = Runtime.getRuntime();
            try {
                Process ps = rt.exec("java  -classpath C:\\  Prova");
                ps.waitFor();
                
                System.out.print(ps.exitValue());
            } catch (Exception ex) {
               
            }
             
    
        }

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reiuky
    la classe chiamata resta in attesa che la chiamante venga chiusa prima di essere eseguita, e non è assolutamente quello che mi serve.
    L'applicazione che lanci con exec() produce molto output su standard-output?? Ripeto che l'output lo devi leggere.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #16
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    E per leggerlo devo usare OutputStream?

    Comunque, nel modo suggerito da Romeo proprio non funziona

  7. #17
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Reiuky
    E per leggerlo devo usare OutputStream?
    L'InputStream fornito da getInputStream() di Process. Se vuoi leggere "a righe" fai il wrapping in un InputStreamReader e poi in un BufferedReader e usa il suo readLine().
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #18
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Sì. è quello che già faccio. Ma non funziona comunque....

    Adesso stò tentando per un'altra via:

    scrivendo in un file .bat

    codice:
    set classpath=C:\Firme_Ra\Program\gestione
    set classPath=%classpath%;c:\Firme_Ra\Program\testFlussiFD\
    
    javac BrowseDirectory.java
    javac FirmeRaMain.java

    Riesco a compilarlo senza ottenere il 'solito' errore che mi dice che non trova la classe chiamata. Quindi, potrei lanciare la classe chiamata direttamente da dentro il programma. (?)

    solo che, quando lancio la compilazione, mi da l'errore

    codice:
    FirmeRaMain.java:49: cannot find symbol
    symbol  : class BrowseDirectory
    location: class prov.FirmeRaMain
            private static BrowseDirectory dirFlussi;
                           ^
    FirmeRaMain.java:88: cannot find symbol
    symbol  : class BrowseDirectory
    location: class prov.FirmeRaMain
                    dirFlussi = new BrowseDirectory( nomeDirFlussi );
                                    ^
    2 errors
    La classe incriminata si trova nella stessa Directory, nello stesso cakeage e la directory è una delle due scritte nel classpath, nonchè definita come variabile di sistema.

    è un tentqativo, ma se riuscissi a compilare, potrei almeno tentare in questo modo

  9. #19
    Utente di HTML.it L'avatar di Reiuky
    Registrato dal
    Jul 2008
    Messaggi
    371
    Ormai credo di aver sfiorato l'assurdo:

    Ho messo il runtime all'interno di un thred, che, quindi, dovrebbe essere eseguito a se stante.

    Invece, prima di iniziare aspetta che chiudo il programma principale.

    Possibile che debba forzare la chiusura sel thred una volta lanciato il comando runtime?

  10. #20
    ma ce li puoi passare ste classi se puoi? o un facsimile

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.